C語言中關於字串和字元陣列的相關知識點

2021-09-29 06:03:59 字數 2099 閱讀 3407

(1)c語言中沒有字串這種資料型別,但可以通過char的陣列來代替;

(2)字串一定是乙個char的陣列,但char的陣列不一定是字串;

(3)以數字0(和字元'0'等價)結尾的char陣列就是乙個字串,但如果char陣列沒有以數字0結尾,那麼它就不是乙個字串,只是普通的字元陣列。所以字串是一種特殊的char型的陣列。

#define _crt_secure_no_warnings

#include int main(void)

; //字元陣列

char arr2[6] = ; //字串

char arr3 = ; //字串

從程式的執行結果我們可以看到arr2和arr3被列印出的結果都是:「hello"。arr2中有6個元素,但我們在定義時只給了5個,這種情況下,陣列中其實還有乙個隱藏的'\0',因此arr2可以看作是乙個字串。由於有結束列印的標誌:'\0',所以列印時不會報錯。arr3中顯示的給出了'\0',也可以正常列印。

問題的關鍵是如果我們列印arr1,會報錯嗎?答案是肯定的。

#define _crt_secure_no_warnings

#include int main(void)

; //字元陣列

char arr2[6] = ; //字串

char arr3 = ; //字串

我們可以看到,結果出現了亂碼。出現這種情況的原因是:我們給陣列arr1分配了5個位址空間,同時又把5個字元放到了這5個位址空間裡面。位址空間被佔滿了,也就是說沒有結束標誌的儲存位置了,因此當我們呼叫printf函式列印時,"%s"找不到結束標誌:'\0',就也繼續列印了,直至遇見'\0'或0時停止。結果是亂碼也就不難理解了。

說明:字串結束標誌為\0,數字0等同於\0,但是不等同於『0』。

char *gets(char *s);

功能:從標準輸入讀入字元,並儲存到指定的記憶體空間,直到出現換行符或讀到檔案結尾為止。

gets(str)與scanf("%s",str)的區別:

(1)gets(str)允許輸入的字串含有空格;

(2)scanf("%s",str)不允許輸入的字串中含有空格。

注意:由於gets()和scanf()無法知道字串s的大小,必須遇到換行符或讀到檔案結尾才結束輸入,因此容易導致字元陣列越界(緩衝區溢位)的情況。

fputs()是puts()的檔案操作版本,但fputs()不會自動輸出乙個'\n'。

C語言中的字串和字元陣列

1 字元陣列的定義與初始化 字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。char str 10 即把10個字元分別賦給str 0 到str 9 10個元素 如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理 若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定...

日常 C語言中的字元陣列和字串

c語言字元陣列和字串 1.存放字元的陣列稱為字元陣列 char str 2.0 也被稱為字串結束標誌 3.由 包圍的字串會自動在末尾新增 0 4.逐個字元地給陣列賦值並不會自動新增 0 5.區域性變數初始化為零值會自動新增結束標誌 6.直接使用乙個指標指向字串的形式 char str 7.最根本的區...

c語言中的字元陣列與字串

一 字元陣列的定義 一維字元陣列 用於儲存和處理1個字串,其定義格式與一維數值陣列一樣。char str 20 二維字元陣列 用於同時儲存和處理多個字串,其定義格式與二維數值陣列一樣。char country 10 20 country 第i個字串 二 字元陣列的初始化 字元陣列的初始化.1.可以通...