我需要读取一个文件,然后通过套接字发送它,但由于某种原因导致崩溃。 有什么想法吗?
//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);
答案 0 :(得分:3)
该代码中存在相当多的基本混淆。
ftell()
返回long
,而不是int
。此外,它应该是const
,因为我们在阅读时假定文件的大小不会改变。rewind()
和使用fseek()
来抵消0。malloc()
in C。sizeof (char)
扩展分配,而且始终为1。void *
中的fread()
,这完全没有意义。fread()
中的文件长度,在未定义的指针上调用strlen()
是未定义的行为。fread()
是否成功。答案 1 :(得分:1)
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.