|
배열 생성은 되던거같은데... 안되나요??
그럼 어떻게하면되나요..??
char 로 써야하나요..??
부탁드립니다...
Lyn 님이 쓰신 글 :
: 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] ... 배열 다만들어졌을텐데...
: :
|