|
//---------------------------------------------------------------------------
#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] ... 배열 다만들어졌을텐데...
|