C語言關於fgets函式,C語言關於fgets函式

2021-03-03 21:41:41 字數 3836 閱讀 5821

1樓:匿名使用者

可能會溢位。

記憶體中給ch分配一個位元組的空間,而你這裡是讀取n+1個位元組,只要n>0就會出現溢位。

2樓:

當然有可能復溢位,一般來制說不會宣告一個字元變數,然後把讀取的一段資料往一個字元變數所在的地址放(那字元變數後面的記憶體不是都被蓋了?),正確的用法是malloc一段大小的記憶體,一次讀取的大小不超過這段記憶體的大小,這樣才安全。

c語言中的fgets函式。

3樓:暗影之王

fgets()函式用於從檔案流中讀取一行或指定個數的字元,其原型為:

版char * fgets(char * string, int size, file * stream);

引數說明:

string為一個字元陣列,用來保權

存讀取到的字元。

size為要讀取的字元的個數。如果該行字元數大於size-1,則讀到 size-1 個字元時結束,並在最後補充' \0';如果該行字元數小於等於 size-1,則讀取所有字元,並在最後補充 '\0'。即,每次最多讀取 size-1 個字元。

stream為檔案流指標。

【返回值】讀取成功,返回讀取到的字串,即string;失敗或讀到檔案結尾返回null。因此我們不能直接通過fgets()的返回值來判斷函式是否是出錯而終止的,應該藉助feof()函式或者ferror()函式來判斷。

注意:fgets()與gets()不一樣,不僅僅是因為gets()函式只有一個引數 file *stream,更重要的是,fgets()可以指定最大讀取的字串的個數,杜絕了gets()使用不當造成快取溢位的問題。

4樓:匿名使用者

哦 這裡是特殊情況。

initial這個陣列長度只有2, 讀進來一個資料就滿了(因為第二個位置要寫0呢。 所以後面的回車沒被讀進來,因為緩衝區滿了。

5樓:讓清茅笑寒

fgets函式原型如下:

char

*fgets(char

*s,int

n,file

*stream);

它一次從檔案中讀取一行,包括換行符,放入字串s中,並且加上字串結束標誌符'\\

6樓:匿名使用者

好像unix裡面換行符必須是\n\r兩個字元,會不會是fgets在unix系統裡面執行時只能讀取\n,把\r留了下來.

我沒用過unix,等候高手指正.

7樓:匿名使用者

函式的功能是從指定的檔案中讀一個字串到字元陣列中,函式呼叫的形回式為:fgets(字元陣列名

答,n,檔案指標);

其中的n是一個正整數。表示從檔案中讀出的字串不超過 n-1個字元。在讀入的最後一個字元後加上串結束標誌'\0'。

1) 在讀出n-1個字元之前,如遇到了換行符或eof,則讀出結束。

2) fgets函式也有返回值,其返回值是字元陣列的首地址。

一個關於c語言中的fgets函式的問題 20

8樓:匿名使用者

fgets()函式用於來從檔案流中讀取

源一行或指定個數的字元,其原型為:

char * fgets(char * string, int size, file * stream);

引數說明:

string為一個字元陣列,用來儲存讀取到的字元。

size為要讀取的字元的個數。如果該行字元數大於size-1,則讀到 size-1 個字元時結束,並在最後補充' \0';如果該行字元數小於等於 size-1,則讀取所有字元,並在最後補充 '\0'。即,每次最多讀取 size-1 個字元。

stream為檔案流指標。

【返回值】讀取成功,返回讀取到的字串,即string;失敗或讀到檔案結尾返回null。因此我們不能直接通過fgets()的返回值來判斷函式是否是出錯而終止的,應該藉助feof()函式或者ferror()函式來判斷。

注意:fgets()與gets()不一樣,不僅僅是因為gets()函式只有一個引數 file *stream,更重要的是,fgets()可以指定最大讀取的字串的個數,杜絕了gets()使用不當造成快取溢位的問題。

關於c語言中字串處理函式fgets的用法

9樓:匿名使用者

fgets(str1,11,stdin); -- fgets 從檔案輸入流讀取一行字串(分隔符是換行鍵),包括空白到

回 str1 裡。stdin 表示標準輸入流,就是鍵盤輸入。答11 (實際上用10) 是 最多讀入的字元個數。

當一行(含'\n') 不足11個字元 時,讀到 '\n',包括 '\n' ,放入str1

當一行超過10個字元時,只讀10個字元,放入str1。

照理你應當宣告:

char str1[11] ,str2[11]; 而不是 [10].

---------

當你拍入 1234567890abcdefg,這串東西進了 輸入緩衝區

fgets(str1 。。)到 輸入緩衝區 用去了 1234567890, 還餘下 abcdefg

fgets(str2 。。)接著 到 輸入緩衝區,從餘下的東西里 取數。打算 取 11 (實際上用10)個字元,但遇到了 enter 鍵,所以 讀入的內容是 abcdefg

輸出語句就不用說了。

10樓:

fgets(str1,11,stdin); -- fgets 從檔案輸入

抄流讀取一bai行字串(分隔符是du換行鍵

zhi),包括空白到

dao str1 裡。stdin 表示標準輸入流,就是鍵盤輸入。11 (實際上用10) 是 最多讀入的字元個數。

當一行(含'\n') 不足11個字元 時,讀到 '\n',包括 '\n' ,放入str1

當一行超過10個字元時,只讀10個字元,放入str1。

照理你應當宣告:

char str1[11] ,str2[11]; 而不是 [10].

---------

當你拍入 1234567890abcdefg,這串東西進了 輸入緩衝區

fgets(str1 。。)到 輸入緩衝區 用去了 1234567890, 還餘下 abcdefg

fgets(str2 。。)接著 到 輸入緩衝區,從餘下的東西里 取數。打算 取 11 (實際上用10)個字元,但遇到了 enter 鍵,所以 讀入的內容是 abcdefg

輸出語句就不用說了。

11樓:我是百人敵

fgets(char* s, int size, file* stream) :復

最多在stream中讀取size-1個字元制存入s指向的緩bai衝區。

遇到eof(檔案du

結束符)zhi

dao或'\n'結束,('\n'放入s中)並在末尾加個\0。

c語言檔案操作中fgets函式的使用

12樓:匿名使用者

#include

#include

// #pragma warning(disable:4996)const int maxlen = 1000;

int main() ;

// memset(s, 0, sizeof(s)); // s要被多次使用的

file *p = fopen("e:\\輸入資訊du得文字.txt", "w");

if(p == null)

while (1)

fclose(p);

printf("end\n");

return 0;}

關於c語言scanf()函式用法

scanf是c語言中的一個輸入函式,與printf函式一樣,都被宣告在標頭檔案stdio.h裡,因此在使用scanf函式時要加上 include 在有一些實現中,printf函式與scanf函式在使用時可以不使用預編譯命令 include 它是格式輸入函式,即按使用者指定的格式從鍵盤上把資料輸入到指...

C語言函式

這是函式的遞迴呼叫,類似數列的遞推式,程式的意思是shi n n shi n 1 shi 0 0 可以把shi n 看成熟悉的x n 所以結果為10 9 1 0 55 呼叫順序shi 10 shi 9 shi 8765421 shi 0 10到1的呼叫都還沒return 到0的時候 執行if c 0...

c語言sort函式如何使用C語言sort函式如何使用

c語言中沒有預置的sort函式。如果在c語言中,遇到有呼叫sort函式,就是自定義的一個函式,功能一般用於排序。一 可以編寫自己的sort函式。如下函式為將整型陣列從小到大排序。void sort int a,int l a為陣列地址,l為陣列長度。對於這樣的自定義sort函式,可以按照定義的規範來...