|
: fwrite(&StrTemp, sizeof(StrTemp), 1, fp);
이 라인이 문제인 것 같네요.
sizeof(StrTemp)는 이 배열의 길이, 즉 항상 1000 (20*50)이 되어서
실제 스트링의 길이에 상관없이 1000바이트를 쓰니까 가비지 값이
파일에 쓰여지는 것이겠지요. (아니면 엉뚱한 번지를 읽어서
프로그램이 죽을 수도..)
sizeof(StrTemp) 대신 윗줄에서 구한 ColTemp를 쓰시면 되지 않을까 하네요.
근데, 왜 text mode로 파일을 오픈하고 fwrite()를 쓰는지 이해가 안되네요.
Text mode인 경우라면 fprintf()를 쓰시고, fwrite()를 쓰려면
binary mode로 오픈해야겠죠.
DB에 대해서는 저는 잘 몰라서 여기까지만 리플합니다..
멘땅에 헤딩 님이 쓰신 글 :
: ======빌더를 시작한지 얼마 안되는 초보입니다..
: 혼자서 해결할려고 했는데.. 도저히 제 능력으로는 어렵네여..
: 지정한 파일에 값이 들어가기는 들어가는데 쓰레기값하고 같이 들어가여..
: 제 생각으로는 fwrite부분에서 sizeof부분에서 문제인것 같은데...
: 그리고 또 하나 Query1->Next부분에서 에러가 나거든여..그 부분도 어떻게 안될까여...
:
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: int i, j, ColTemp, Col;
: char StrTemp[20][50];
: char Str[50];
: FILE *fp;
:
: if ((fp = fopen("c:\창길이\samfile.txt", "wt")) == NULL)
: {
: ShowMessage("파일이 열리지 않았습니다.");
: }
:
: Col = Query1->FieldCount; //필드의 갯수
:
: // while(!Query1->Eof)
: // {
: for (i = 0; i < Col; i++)
: {
: strcpy(Str,Query1->Fields->Fields[i]->FieldName.c_str());
: ColTemp = strlen(Str); //쓰레기값을 제거하기 위해 문자열의 길이 파악
: for ( j =0; j < ColTemp; j++)
: {
: StrTemp[i][j] = Str[j];
: }
: }
: fwrite(&StrTemp, sizeof(StrTemp), 1, fp);
:
: // Query1->Next;
: // }
: fclose(fp);
:
:
: }
:
:
:
|