關於char 和char 的不同

2021-08-01 18:20:33 字數 908 閱讀 2622

在c語言中,我們經常用如下兩種方式來表示字串:

char *string = "hello world";

char

string = "hello world";

可能有時還會用這種方式:

char

string[11] = "hello world";

問題來了,他們一樣嗎?不一樣的話有什麼不同?

我用如下**來做測試:

#include

#include

int main(void)

用gcc編譯後輸出如下:

sizeof: 8 12 11

strlen: 11 11 11

str1[12]=115

str2[12]=0

str3[12]=0

*str1=hello world

str2=hello world

str3[11]=hello world

分析:

str1的長度為8,修改字串的字度後仍然為8,說明這個長度是指標的長度,和字串沒有關係,所以str1的意思就是指向字串的指標。不能有「str1[0] = 『h』;」這樣的寫法,即不能修改字串的內容,執行時會報「segmentation fault」錯誤。

str2的長度為12,因為編譯器在最後自動新增了『\0』,列印str2[12]可以看到該值。

str3的長度為11,這是字元陣列的長度,用printf輸出時有時正常輸出,有時後面會有些亂碼,那是因為str3[12]如果正好是『\0』就正常,如果是其他值就會亂碼。

綜上,在c語言中用char 做字串是最好的。

關於char 和char 的個人理解

今天白天練習一些程式設計題遇到了乙個問題,是 寫好後總是莫名出現段錯誤,再三檢查語法和演算法,百思不得其解。之後突然想到,可能是把char 和char搞混了。原本應該是 char a hello 寫成了char a hello 在這之前我一直以為兩者沒有區別,然後仔細的思考了一番,發現了問題的所在。...

關於char 與char 的區別

char a在執行時賦值,值會從靜態區賦值到函式的棧中,對它進行修改不會產生任何問題。char a在編譯時就確定了,a指向靜態區中的值,沒有賦值到函式棧中,因此對指標的內容進行修改會產生錯誤。和許多文章一樣,還是先來了解一下 乙個由 c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stac...

char 和char 的區別

1 char是乙個陣列定義,char 是指標定義 也稱char為靜態陣列,char 為動態陣列 2 指標和陣列的區別 1 指標和陣列的分配 陣列是開闢一塊連續的記憶體空間,陣列本身的識別符號 也就是通常所說的陣列名 代表整個陣列,可以使用sizeof來獲得陣列所佔據記憶體空間的大小 注意,不是陣列元...