[英]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\\0
, is\\n\\0
, my\\n\\0
, file\\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.