C語言字串知識點

2021-10-24 01:15:36 字數 1611 閱讀 6186

在介紹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 想計算...