在介紹c語言字元和字串之前,許多c語言初學者都很好奇,為什麼字元型別的資料是整型型別?
其實字元在記憶體中,是以整數形式(ascii**0~127)存放在記憶體中的。因而字元型別資料屬於整型。
字元知識點:
定義乙個字元變數:
char c =
'a';
//字元常量要用單引號引用,字串才可以用雙引號
字元這裡就記住要用單引號引用就可以了,接下來才是重頭戲,字串
字串知識點
在c語言中,沒有字串型別,而c++做出了改進,以string為字串型別
故c語言中,字串是存放在字元陣列中的
char c[6]
=;//第一種方式
char c[6]
="shang"
;//第二種方式
大家可以看到,"shang"這是五個字元,那為什麼我定義的時候要定義6個字元的長度?
下面我們將這段簡單的**在vs2019跑一次
#include
intmain()
那結果如何???
相信很多初學者也遇到過這樣的問題,輸出結果為亂碼。
這樣的原因是,編譯器在識別完字串後,會在字串後自動加乙個**』\0』**,以表示字串結束。而在上面的**中,陣列佔5個位元組,而
"shang"的長度恰好也佔五個位元組的長度,沒有為『/0』留下空間,故會出現亂碼。
解決方法:
不設定陣列的大小,直接對其初始化。
#include
intmain()
以下為錯誤想法,讀者可不必檢視
為了說明我以上觀點的正確性,使用sizeof()函式進行測試
#include
intmain()
結果:
在記憶體中的儲存是這樣:
a[0] = 『s』;
a[1] = 『h』;
a[2] = 『a』;
a[3] = 『n』;
a[4] = 『g』;
a[5] = 『\0』
共占用6個位元組的大小。
錯因:在定義陣列時,如,int a[20],就已經確定了記憶體大小。
int a[20]
;//佔4*20個儲存空間
char c[20]
//佔1*20個儲存空間
測試:
#define _crt_secure_no_warnings
#include
intmain()
輸出結果:a = 80, b = 20
與所描述的相符合。
C語言字串相關知識點
c語言字串相關知識點 1.strcpy str1,str2 str1的空間應該不小於 str2 的空間 如果不能滿足,在函式進行中可能發生越界,而導致程式崩潰 2.char ar 51 grammering club.上述定義的字串,使用函式size of ar 所測試的是字串 ar所佔空間大小,使...
C 字串知識點小結
c 提供了一下兩種型別的字串表示形式 c風格字串 c 引入的string 類型別 c 風格的字串起源於 c 語言,並在 c 中繼續得到支援。字串實際上是使用 null 字元 0 終止的一維字元陣列。因此,乙個以 null 結尾的字串,包含了組成字串的字元。下面的宣告和初始化建立了乙個 hello 字...
C語言陣列與字串小知識點
一 c語言陣列使用,存放規則等 1 如 陣列int ages 是一種錯誤的寫法。1 如果想再定義陣列的同時進行初始化,陣列元素個數必須是常量,或者不寫。int a 5 int ages a 也是錯誤的,裡面只能放常量。2 int a 5 int ages a 是正確的。因為沒有進行初始化。2 想計算...