|
AnsiString은 Class 이므로 malloc으로 생성하면 안됨
유일한나 님이 쓰신 글 :
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #include <stdio.h>
: #include <string.h>
: #include <stdlib.h>
: #pragma hdrstop
:
: #include "Unit1.h"
:
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TForm1 *Form1;
: //---------------------------------------------------------------------------
:
: // 지훈
:
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: Fcount=0;
:
: a=(AnsiString*)malloc(sizeof(AnsiString)*30);
: b=(AnsiString*)malloc(sizeof(AnsiString)*30);
: c=(AnsiString*)malloc(sizeof(AnsiString)*30);
: d=(AnsiString*)malloc(sizeof(AnsiString)*30);
:
:
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: for(int i=0;i<30;i++) // 배열 초기화 (초기화위치중요)
: { // a0파일에 저장되는 배열값이 바뀌지않게 버튼을 누를때마다 계속 초기화.
: a[i]=" ";
: b[i]=" ";
: c[i]=" ";
: d[i]=" ";
: }
:
: Fcount=Fcount+1;
:
: stream=fopen("a0.xls","w");
:
: a[0]="출장목적"; // 해당위치에 지정한값 저장
: b[0]="출장자";
: c[0]="부서";
: d[0]="직급";
: a[5]="일비합계";
: b[5]="사용합계";
: c[5]="선불금";
: d[5]="총 청구액";
:
: for(int i=0;i<30;i++) // 변수들 순차적으로 돌리기위함. a[0]~a[30] , b[0]~b[30]
: {
: fprintf(stream,"%s\t%s\t%s\t%s\n",a[i],b[i],c[i],d[i]); // \t 키가 행과 행을 나눠줌
: }
:
: fclose(stream);
:
:
:
:
: for(int i=1;i<=Fcount;i++)
: {
: char fname[256];
:
: if(Fcount==i) // 먼저 저장된 파일의 값에 영향을 주지 않기위해.
: {
: sprintf(fname, "a%d.xls", i);
: stream=fopen(fname,"w");
:
:
: a[1]=Edit1->Text;
: b[1]=Edit2->Text;
: c[1]=Edit3->Text;
: d[1]=Edit4->Text;
: a[6]=Edit5->Text;
: b[6]=Edit6->Text;
: c[6]=Edit7->Text;
: d[6]=Edit8->Text;
:
: for(int i=0;i<30;i++)
: {
: fprintf(stream,"%s\t%s\t%s\t%s\n",a[i],b[i],c[i],d[i]);
: }
:
: fclose(stream);
:
: }
: }
:
:
:
:
: }
:
: //---------------------------------------------------------------------------
:
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
: Edit1->Text="";
: Edit2->Text="";
: Edit3->Text="";
: Edit4->Text="";
: Edit5->Text="";
: Edit6->Text="";
: Edit7->Text="";
: Edit8->Text="";
: }
: //---------------------------------------------------------------------------
:
: 원래 배열을 AnsiString a[30]
: 이런식으로 정해서 썼는데, 배열값낭비를 막기위해, 추가시키기위해
: 동적메모리를 쓰려고
: AnsiString* a;
: a=(AnsiString*)malloc(sizeof(AnsiString)*30);
: 이런식으로 썼거든요, 이러면 a[0],a[1],a[2]~a[29]까지 만들어지는거자나요,
: 프로그램돌려봐도 실행은 되요. 근데 Button1Click클릭하면,
:
: for(int i=0;i<30;i++)
: {
: a[i]=" ";
: b[i]=" "; <- 이부분서부터 에러가나요 ..
: c[i]=" ";
: d[i]=" ";
: }
:
: 왜안되는걸까요..?? a[0]~a[29],b[0]~b[29] ... 배열 다만들어졌을텐데...
:
|