我需要读取一个文件,然后通过套接字发送它,但 fread 由于某种原因崩溃。 有什么想法吗?
//Get file length
fseek(fd, 0, SEEK_END);
int fileLen=ftell(fd);
fseek(fd, 0, SEEK_SET);
//Allocate memory
buf=(char *)malloc(fileLen+1)* sizeof(char));
if (!buf)
{
fprintf(stderr, "Memory error!");
}
rewind(fd);
fread((void *)buf, strlen(buf)+1, 1, fd);
最佳答案
该代码中有很多基本的困惑。
-
ftell()
返回long
,而不是int
。而且它应该是 const,因为假设文件的大小在我们读取它时不会改变。 - 无需调用
rewind()
和使用fseek()
来偏移 0。 - Don't cast the return value of
malloc()
in C . - 您不处理字符串,因此不要为某些“终止符”添加字符串。
- 不要按
sizeof (char)
缩放分配,该值始终为 1。 - 在依赖结果之前检查分配是否成功。
- 不要在
fread()
中将缓冲区指针强制转换为void *
,这是完全没有意义的。 - 在
fread()
中使用文件长度,对未定义的指针调用strlen()
是未定义的行为。 - 验证
fread()
是否成功。
关于c - 从文件读取到缓冲区时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22956367/