(C語言問題)為什麼在VC裡gets s 出錯 gets s 用於呼叫的引數太少

2025-07-18 04:30:18 字數 3753 閱讀 3874

1樓:網友

gets_s(a[n],80),函式中,第乙個引數為陣列,第二個引數為陣列最大元素個數,在vs中需要寫這麼乙個引數。

vc++裡不能用gets_s()嗎?

2樓:網友

你的vs版本不行吧,這個好像是vs2005或者更高階的版本才支援吧。

c語言的中gets(s)和scanf("%s",s)的區別

3樓:有錢買不起房子

gets 字串中可以有空白符號,遇到回車終止輸入。

scanf("%s")遇到第乙個空白符號或者回車停止輸入。

4樓:

函式:gets(字元指標)

標頭檔案:中),c++不需包含此標頭檔案。

原型:char *gets( char *buffer );

功能:從stdin流中讀取字串,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為null值,並由此來結束字串。

get(s)返回的是乙個指標。

get(s)是與scanf("%s",&s)相似的 不是scanf("%s",s)相似。

5樓:尋燦者

你可以把那語句寫兩次(重複的)。。

c語言gets_s用法第三點,讀取並丟棄隨後的輸入直到讀到換行符是什麼意思

6樓:網友

gets從標準輸入裝置讀字串。

函式。可以無限讀取,不會判斷上限,以回車結束讀取,所以程式設計師應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。

從stdin流中讀取字串,直至接受到換行符。

或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為『\0』空字元,並由此來結束字串。

讀入成功,返回與引數buffer相同的指標;讀入過程中遇到eof(end-of-file)或發生錯誤,返回null指標。所以在遇到返回值。

為null的情況,要用ferror或feof函式檢查是發生錯誤還是遇到eof。

本函式可以無限讀取,不會判斷上限,所以程式設計師應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。如果溢位,多出來的字元將被寫入到堆疊。

中,這就覆蓋了堆疊原先的內容,破壞乙個或多個不相關變數的值。這個事實導致gets函式只適用於玩具程式,為了避免這種情況,我們可以用fgets(stdin) (fgets實際上可以讀取標準輸入(即大多數情況下的鍵盤輸入),具體參閱fgets詞條)來替換gets()。在v7的手冊(1979年)中說明:

為了向後相容。

gets刪除換行符,gets並不將換行符存入緩衝區。

#include "

這個標頭檔案包含gets()函式。

void main()

char str1[5];

gets(str1);

printf("%s", str1);

gets()函式用來從標準輸入裝置(鍵盤)讀取字串直到換行符結束,但換行符會被丟棄,然後在末尾新增'\0'字元。其呼叫格式為:

gets(s);

其中s為字串變數(字串陣列名或字串指標)。

gets(s)函式與scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函式輸入字串時存在乙個問題,就是如果輸入了空格會認為字串結束,空格後的字元將作為下乙個輸入項處理,但gets()函式將接收輸入的整個字串直到遇到換行為止。

gets(s) 函式中的變數s為一字串指標。如果為單個字元指標,編譯連線不會有錯誤,但執行後記憶體溢位。

錯誤。寬字元版本,當使用unicode寬字元文字時,使用這個函式 _getws();出自:

它說我在gets那兒函式呼叫引數少,怎麼辦啊

7樓:匿名使用者

你查一下gets_s的函式原型,它有兩個引數。

char *gets_s(char *buffer,size_t sizeincharacters);

gets_s(buffer,size) //其中第二引數就是允許的輸入長度。

c語言gets_s用法第三點,讀取並丟棄隨後的輸入直到讀到換行符是什麼意思

8樓:莊政警

舉例說明下:

比如有:char s[10];

gets_s(s,5); //最大隻允許讀取5個字元(包括換行)執行時輸入了 abcdefg, 那麼gets_s函式讀取到第5個字元還沒有讀到換行符,於是把s[0]弄成空字元'\0',然後清空輸入緩衝區(就是把後面的fg和回車符都清理掉了)

c語言 這裡gets_s讀取字元,輸入a,能輸出a[0]為a,而輸入ab時,a[0]沒有任何輸出,什麼原因?

9樓:蔡源專線

「ab」的話算是字串了,你把「%c」改為「%s」試試。

c語言裡的get_s是什麼意思

10樓:繁花敗葉

應該是gets_s函式吧。

對應標頭檔案。

原型:char *gets_s(char *buffer,size_t sizeincharacters);

呼叫形式:gets_s(buffer,sizeincharacters) ;

其中第二引數就是允許的輸入長度, 這裡的size應該分配為buffer-1的長度,因為函式自動為'\0'分配空間的時候會溢位。和gets的區別就是gets讀入不限制輸入長度,所以在2011年12月,ansi 採納了 iso/iec 9899:2011 標準,標準中刪除了 gets()函式,使用乙個新的更安全的函式gets_s()替代。

11樓:網友

s*=s等於s=s*s同樣s-=s等於s=s-s,s+=s等於s=s+s,… 如果s=1,s=s*s(即s*=s)的意思就是把s*s的值賦給等號左邊的s。即結果為1。

12樓:黑丶雨

你用的這個不是c標準庫的函式,標準的是gets,就是從你的鍵盤上讀取你輸的字元放到字串陣列裡。 你這個是也是差不多意思的。

就如你的程式裡,把你輸入的字元放到了string陣列裡。

詳細你可以參考。

13樓:網友

在c語言中,a*=b 相當於 a=a*b

那麼s*=s 就是s=s*s 也就是 s=s^2

c語言非常靈活,乙個式子也很多種寫法,但是就象《孔乙己》中「茴」字的寫法一樣,把常見的搞清楚,能讀懂別人的程式就行,自己寫程式,要用最容易看清、最不容易出錯的方式,提高程式的可讀性。

14樓:網友

從輸入獲取乙個字串。

15樓:匿名使用者

從輸入流中獲取一行資料,具體可以看下msdn有說明。

visual studio中gets_s函式有什麼要注意?

16樓:

因為visual studio用的是老的c標準,即c89,gets函式(包括visual studio中的gets_s)要求函式引數必須是char陣列名,不能是char指標。

現在的dev c++用的是c99標準,gets函式的引數允許使用char指標(另外可以使用//單行註釋,變數定義位置可任意等從c++移植的新特性,這都是c89標準不支援的)

c語言問題,為什麼會輸出負數,C語言問題,輸出結果總是負數,求教

在你的switch語句最後都加一個default 看一下switch d switch u 如果出現error這行,說明你的fflush 沒有起作用,改正方法是在scanf 函式後,加一個getchar 如果沒有出現,把你的輸入資訊粘出來,即x d u都是什麼。再幫你看 這個問題有多種可能,不一而足...

一道C語言題,為什麼,一道C語言題,為什麼輸出的結果為負數?

答案a是正確的,因為這個輸入語句,要求先輸入一個浮點數,然後一個逗號再接著是一個整數,所以應當選擇答案a 一道c語言題,為什麼輸出的結果為負數?一道c語言題,為什麼是1呢?逗號表示式是由左向右算,執行y x後,x和y都是6,的優先順序比 要高,所以x y 6相當於x y 6 因為y已經是6,所以y ...

c語言指標問題,為什麼 p 不對 而 p) 100 對

int p表示指向整數型的指標,而int p 表示指向乙個整數型陣列的指標。前面是一組指標,後面可以理解為二組指,可以換成int p是可以的。c語言指標問題,這個為什麼不對 a next賦值太早,這個時候p還沒有初始化,值是錯誤的。跟後面那換個位置就可以了。p linklist malloc siz...