在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來獲得陣列所佔據記憶體空間的大小 注意,不是陣列元...