[英]detect EOL in C using fgets
我正在嘗試使用以下命令從文件中讀取一行...
while(fgets(c,BUF,f) != EOL){
puts(c);
}
EOL = #define EOL '\\n'
但是,我收到警告... comparison between pointer and integer
實現我正在嘗試的正確方法是什么?
fgets 讀取一個字符串,結果類型為char*
我認為您正在考慮fgetc
嗎?
你為什么不試試 fgetc 呢? 然后你可以像這樣比較'/n'的ASCII碼
while (fgetc (file) != '\n'){
puts(c);
}
您需要取消引用返回的char*
並將其與EOL
進行比較……而不是將實際指針地址本身與行尾字符進行比較。
將您的代碼更改為:
char* return_val = NULL;
while((return_val = fgets(c,BUF,f)) != NULL && *return_val != EOF)
{
puts(c);
}
if (retun_val == NULL)
{
//handle error
}
您必須在調用fgets
后檢查c
的內容,以確定返回的字符串中是否包含換行符:
for (;;) { if (fgets(c, BUF, f) == NULL) { /* handle error */ } if (strchr(c, EOL) != NULL) { puts(c); } else {break; } }
fgets
從流中讀取字符並將它們寫入緩沖區,直到緩沖區幾乎已滿或找到'\\n'
(如果操作失敗,則返回 NULL)。
因此,您可以知道使用strlen
讀取了多少個字符(包括'\\n'
)...
ret = fgets(buffer, sizeof buffer, stdin);
if (ret == NULL) /* deal with error */;
chars = strlen(buffer);
現在,兩件事情之一可能已經hapenned:要么是'\\n'
被讀取之前的緩沖得到了面前完全或緩沖區滿GOR '\\n'
被讀取。 您可以通過檢查緩沖區中的最后一個字符來知道是哪個
if (buffer[chars - 1] == '\n') /* full line read */;
else /* incomplete line */;
請注意, chars
總是 (*) 1 或更多,因此表達式buffer[chars - 1]
是可以的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.