簡體   English   中英

從文件讀取到緩沖區時出現分段錯誤

[英]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。
  • 不要在C中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM