[英]c fgets stuck in beginning of file
嘗試使用以下基本代碼,但是輸出文件在無限循環中充滿了空字符。
使用ftell
我可以看到inFile
指針卡在了第二個字符上並且沒有繼續。
我的錯誤在哪里? 為什么fgets
卡住了?
char line[MAX_LINE];
while ((fgets(line, MAX_LINE, inFile)) != NULL)
{
int i = 0;
*(strchr(line, '\n')) = '\0';
while (line[i] != '\0')
{
fprintf(outFile, "%c", line[i]);
i++;
}
}
我更改了該行的內容:
*(strchr(line, '\n')) = '\0';
至
char* ptr = strchr(line, '\n');
if (ptr) {
*ptr = '\0';
}
參見: https : //ideone.com/jQr7ne
而且有效。 如注釋中所述,問題是,即使該行不包含換行符,也始終要取消引用strchr
的返回值。 在我的示例中,最后一行沒有。 這使得函數strchr
返回NULL
,從而導致運行時錯誤。
在此期間,我建議將發送行緩沖區到輸出文件的循環從一次發送字符更改為發送整個緩沖區。 像這樣:
while ((fgets(line, MAX_LINE, inFile)) != NULL)
{
char* ptr = strchr(line, '\n');
if (ptr) {
*ptr = '\0';
}
fputs(line, outFile);
}
return 0;
這消除了不需要的循環和變量,並且開銷較小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.