對讀取字串的說明

2021-09-26 14:00:33 字數 1203 閱讀 2497

字串的兩種定義形式,它們分別是:

char str1 = "";

char *str2 = "c語言中文網";

這兩種形式其實是有區別的,第一種形式的字串所在的記憶體既有讀取許可權又有寫入許可權,第二種形式的字串所在的記憶體只有讀取許可權,沒有寫入許可權。printf()、puts() 等字串輸出函式只要求字串有讀取許可權,而 scanf()、gets() 等字串輸入函式要求字串有寫入許可權,所以,第一種形式的字串既可以用於輸出函式又可以用於輸入函式,而第二種形式的字串只能用於輸出函式。

另外,對於第一種形式的字串,在[ ]裡面要指明字串的最大長度,如果不指明,也可以根據=後面的字串來自動推算,此處,就是根據""的長度來推算的。但是在前乙個例子中,開始我們只是定義了乙個字串,並沒有立即給它賦值,所以沒法自動推算,只能手動指明最大長度,這也就是為什麼一定要寫作char url[30],而不能寫作char url的原因。

讀者還要注意第 11 行**,這行**用來輸入字串。上面我們說過,scanf() 讀取資料時需要的是資料的位址,整數、小數、單個字元都要加&取位址符,這很容易理解;但是對於此處的 url 字串,我們並沒有加 &,這是因為,字串的名字會自動轉換為字串的位址,所以不用再多此一舉加 & 了。當然,你也可以加上,這樣雖然不會導致錯誤,但是編譯器會產生警告,至於為什麼,我們將會在《陣列和指標絕不等價,陣列是另外一種型別》《陣列到底在什麼時候會轉換為指標》(c語言中文網)中講解。

關於字串,後續章節我們還會專門講解,這裡只要求大家會模仿,不要徹底理解,也沒法徹底理解。

最後需要注意的一點是,scanf() 讀取字串時以空格為分隔,遇到空格就認為當前字串結束了,所以無法讀取含有空格的字串

gets() 是有緩衝區的,每次按下回車鍵,就代表當前輸入結束了,gets() 開始從緩衝區中讀取內容,這一點和 scanf() 是一樣的。gets() 和 scanf() 的主要區別是:

scanf() 讀取字串時以空格為分隔,遇到空格就認為當前字串結束了,所以無法讀取含有空格的字串。

gets() 認為空格也是字串的一部分,只有遇到回車鍵時才認為字串輸入結束,所以,不管輸入了多少個空格,只要不按下回車鍵,對 gets() 來說就是乙個完整的字串。

也就是說,gets() 能讀取含有空格的字串,而 scanf() 不能。

C 讀取字串

我們在使用鍵盤輸入字串的時候,輸入流對於字串的讀取有幾種不同的實現方式。cin cin 在讀取字串時使用空白 空格 製表符和換行符 來確定字串的結束位置,這說明cin在獲取字元陣列輸入時只能讀取乙個單詞。而讀取該單詞後,cin將該字串放到陣列中,並在結果自動新增空字元。so,在某些時候,我們需要使用...

讀取字串長度

c 關於讀取乙個字串長度 包括空格回車 自用 方法1 include include using namespace std intmain 方法2 include include include include include using namespace std intmain 方法3 inc...

從檔案讀取字串總結

從檔案讀取字串 fscanf 1.遇到空格和換行等不可見字元結束,不會讀入換行符,末尾新增 0 2.兩行中間的乙個空行或多個空行不會讀入 3.當檔案末尾有乙個空行或多個空行時會讀一次,但不會讀入任何內容,目標字串不變,也不會新增 0 fgets str,n,fp 1.只有遇到換行 x0d x0a 和...