c - Fread 中止 6 错误

标签 c malloc fread

在我的代码中,我发送的数据包每个都包含文本文件中的 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/

相关文章:

c - C 中的 fread 和 fwrite 链表

R中data.table包中fread速度的原因

c - 为什么调用 fread 会将我的文件指针设置为空?

c++ - 将对象 move 到 malloc 的内存中是否有效 C++?

c - C标准库的位置

c++ - MySQL 中的 where 子句如何工作?

java - 使用 JNI 在 Java 和 C 之间进行高效的数据共享

c - 在尝试释放 C 中分配的数组内存时抛出异常说 "project.exe has triggerd a breakpoint"

c - 仅使用返回的指针获取 malloc 的大小

c - C编程输出平均值