在我的代码中,我发送的数据包每个都有128个字节来自文本文件,需要从文本文件中读取数据(我不能在发送前分配缓冲区并读取所有内容,因为文件将非常大)。出于某种原因,即使我分配了内存,我也会收到Abort 6错误。
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);
答案 0 :(得分:2)
我认为您需要做的就是用strcpy
代替最终的memcpy
。也就是说,最后一行应为memcpy(packingT.data, sendString, 128);
(编辑:原因是strcpy通过在末尾扫描零来确定要复制的东西的长度。你正在读取任意数据,它可能在中间有零,并且可能不总是以零)
(编辑2:请注意,packingT.data的内容未终止,因此您无法在其上使用字符串函数。根据您正在执行的操作,您可能需要添加终止符,或确保一个被写入文件)