c - 从文件读取到缓冲区时出现段错误

标签 c sockets buffer fread

我需要读取一个文件,然后通过套接字发送它,但 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/

相关文章:

c - C运算中的Socket客户端

java - 具有 NIO channel 的简单客户端-服务器程序

Android 和 Arduino socket

c - 在sendmsg和recvmsg(unix套接字)中定义msghdr长度

c - 如何让 gcc 将包含函数调用的表达式识别为常量?

c - 使用 union 时将标签字段值分配给结构

c++ - 如何获取其他进程的TCP/UDP套接字对的远程端口

c - 如何实现客户端和服务器之间的同步

javascript - Node 缓冲区 : How to read out bit flags?

c - 为什么我的指针被锁定在一个范围内?