[英]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.