在我的代码中,我发送的数据包每个都包含文本文件中的 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);
最佳答案
我认为您需要做的就是将最后的 strcpy
替换为 memcpy
。也就是说,最后一行应该是 memcpy(packingT.data, sendString, 128);
(编辑:原因是 strcpy 通过扫描末尾的零来确定要复制的内容的长度。您正在读取任意数据,中间可能有零,并且可能并不总是以零)
(Edit2:请注意,packingT.data 的内容没有终止,因此您不能对其使用字符串函数。根据您正在执行的操作,您可能需要添加一个终止符,或确保一个终止符被写入文件)
关于c - Fread 中止 6 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47384551/