簡體   English   中英

為什么我的輸出格式化為fgets中的“ \\ n”自動格式?

[英]Why is my output formatted, i.e. '\n' automatically in fgets?

這是我的代碼

#include<stdio.h>
int main()
{
FILE* fp;
int i;
fp=fopen("newfile","r");
if(fp==NULL)
{
   printf("hhaha");
   return 0;
}
char str[20];
for(i=0;i<2;i++)
{
    fgets(str,20,fp);
    printf("%s",str);
} 
return 0;
}

現在,如果我的新文件中有文字

我的名字
是xyz

那當我打印兩行並換成兩行時又會怎樣呢? 換行符從何而來?

fgets將指針設置為char *的指針,該char *表示文件的行,在該行的末尾包含\\n (與大多數字符串一樣,它也將以'\\0'終止)

帶有以下內容的文件:

這個

我的
文件

將來自fgets

This\\n\\0is\\n\\0my\\n\\0file\\n\\0 1


1最終值不能包含\\n 這將取決於它是否為\\n終止文件。

來自man fgets

gets()從stdin讀取一行到s所指向的緩沖區,直到終止換行符或EOF,然后將其替換為'\\ 0'。 不檢查緩沖區溢出(請參閱下面的錯誤)。

fgets()最多從流中讀取小於大小的字符,並將它們存儲到s所指向的緩沖區中。 在EOF或換行符之后停止讀取。 如果讀取了換行符,則將其存儲在buffer中 緩沖區的最后一個字符之后將存儲一個'\\ 0'。

因此fgets行為與您預期的不同

在Linux手冊頁中的fgets()中:

fgets()最多從流中讀取小於大小的字符,並將它們存儲到s所指向的緩沖區中。 在EOF或換行符之后停止讀取。 如果讀取換行符,則將其存儲到緩沖區中。 緩沖區中的最后一個字符之后將存儲一個'\\ 0'。

當讀取字符串時, fgets()包括換行符-這就是fgets()定義為工作方式的方式。 從標准:

在換行符(保留)或文件結束之后,不會讀取其他字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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