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函式,可以按照定義的規範來...