scanf是c語言中常用的標準輸入輸出函式,它的常規用法是scanf(「輸入格式」,輸入位址),scanf從輸入緩衝區取入資料按照指定的「輸入格式」儲存到指定的「輸入位址」。
但是有一類問題通常令人頭疼,那就是字串的讀入,此處僅僅討論使用scanf讀取字串的一些問題。
理論上你只需要定義乙個字元指標,然後scanf每次讀入字元儲存到該指標所指的儲存空間,之後指標值自動加1.
所以,我們就有了下面兩種讀入字串的辦法:
1.定義字元陣列
#include
#include
int main(void)
完美執行,但是得說明一點,這裡的字元陣列必須事先確定好長度,即得事先吧記憶體開闢好,不然執行肯定會出錯。
2.定義字元指標
#include
#include
int main(void)
scanf既然可以在每次讀入乙個字元之後,自動為指標+1,那麼我們自然而然就想到其實我們是可以定義乙個字元指標,然後scanf就往這個字元指標中讀取字元,但是其實不然,執行一下就會發現這種情況是錯誤的,為什麼呢?
因為我們沒有為scanf輸入的指標申請儲存空間,scanf輸入的資料必須也只能存放到實現申請好的儲存空間,不然輸入的字元可能會覆蓋掉**段或者其他一些地方的資料,引發未知的錯誤。
現在我們就試一試事先申請記憶體:
#include
#include
int main(void)
完美執行。
簡單總結一下,那就是如果要使用scanf讀入字串,那就一定要事先為它申請足夠的記憶體空間。
scanf讀入字串與讀入字元的區別
今天下午比賽時候有道題用c 輸入輸出是超時的,所以準備換上c試試,發現幾個小問題 1 使用scanf c a 讀取a a是char型別 如果讀取之前有換行符或者空格,那麼a就會把之前的換行符或者空格讀取到,解決方法就是這之前先getchar 一下。2 而如果用scanf s str 讀取str 我發...
C語言裡scanf讀入字串時的小問題
原來對於字元指標和字元陣列的區別很模糊 1 無意間嘗試用scanf讀入未初始化的字元指標報了段錯誤 char str1,str2 scanf s str1 scanf s str2 字元指標如果沒有像這樣 char str1 abcdef str1指向的是字串常量池的位址顯式地進行初始化 或者沒有用...
字串讀入問題 C語言
字串讀入3種形式 scanf gets getchar scanf不可以讀入空格,讀入空格即可停止,算乙個字元陣列 不含空格 可以應用於2個句子間有很多空格,但2個句子本身沒有空格 gets可以讀入空格,可以讀入含有空格的句子的時候,getchar是讀入乙個字元,可以讀入空格,經常用於處理讀掉空格。...