[英]segmentation fault when reading from file to buffer
我需要读取一个文件,然后通过套接字发送它,但是由于某种原因导致崩溃。 任何想法?
//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。 malloc()
的返回值 。 sizeof (char)
缩放分配,始终为1。 fread()
中的void *
,这是毫无意义的。 fread()
的文件长度,在未定义的指针上调用strlen()
是未定义的行为。 fread()
成功。 fread((void *)buf, strlen(buf)+1, 1, fd);
应该
fread((void *)buf, 1, fileLen, fd);
您没有初始化buf
的内容,因此strlen(buf)
将不会返回正确的buf
长度。
顺便说一句, buf=(char *)malloc(fileLen+1)* sizeof(char));
应该是buf=(char *)malloc(fileLen);
,则无需分配该额外的字节,并且sizeof(char)
始终返回1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.