2017-11-20 9 views
-1

私のコードでは、テキストファイルから128バイトのパケットを送信しています。テキストファイルからデータを読み込む必要があります(バッファを割り当てて送信する前にすべてを読むことはできません)ファイルが非常に大きくなるため)。何らかの理由で私はメモリを割り当ててもAbort 6エラーが出ます。Fred Abort 6 error

SendIndexは0として開始し、問題ではないはずの最初の送信に対して打ち切ります。

問題はstrcpyで発生します。理由はわかりません。

本当に混乱しているので、私は本当に助けに感謝します。

struct packet packingT; 
packingT.header = mpHeaderT; 
packingT.data = (char*) calloc(512,sizeof(char)); 

char* sendString = (char*)calloc(128,sizeof(char)); 


FILE *file = fopen(receivedStruct->fileTitle, "rb"); 
if(file == NULL) { 
    printf("Error - Can't Open File\n"); 
    exit(0); 
} 

fseek(file, 128*sendIndex, SEEK_SET); 

fread(sendString, 128, 1,file); 
fclose(file); 
// sendString[128] = '\0'; <--- Still don't know if this is needed 

packingT.header->seq_num = receivedStruct->nextSeqNum; 

strcpy(packingT.data, sendString); 

答えて

1

私はあなたがする必要があるすべては代わりにmemcpyで最終strcpyを交換だと思います。つまり、最後の行はmemcpy(packingT.data, sendString, 128);

である必要があります(編集:その理由は、strcpyが最後に0をスキャンすることによってコピーされるものの長さを決定するからです。中にあり、常に0で終わるとは限りません)

(Edit2:packingT.dataの内容は終了していないので、文字列関数を使用することはできません。ターミネーターを追加するか、ファイルに確実に書き込む必要があるかもしれません)

関連する問題