簡體   English   中英

使用 fgets 檢測 C 語言中的 EOL

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

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