關於字元陣列和字元型指標定義的字串長度問題

2021-08-20 06:41:58 字數 971 閱讀 6426

用sizeof和strlen來度量字串所佔位元組數字串長度的測試

printf(「%ld %ld\n」, sizeof(test), strlen(test));

char *test1 = 「nihao」;                //85

char test2 = 「nihao」;                //65

char test3[20] = 「nihao」;            //205

char test4[20];                            //200

sizeof(test1) = 8;   //此時8代表的是char指標變數型別的長度是8位元組64位

strlen(test1) = 5;   //此時代表的是字串的長度

sizeof(test2) = 5; //此時字元陣列的長度就是字串的長度

strlen(test2) = 6;   //此時包含了『\0』字串結尾標誌長度為6

sizeof原理:sizeof表示的是當前變數所佔的記憶體空間包括\0,但是當使用char str = ;這樣的字元陣列的時候sizeof(str) == 5;

strlen原理 strlen 表示的是當前字串的長度,也就是不包括\0的長度,當逐位審查字串的時候遇到字串結尾標識\0的時候返回,不包括\0,其中空格,tab,換行符都不是\0;

sizeof(「nihao\n」)== sizeof(「nihao\t」) == sizeof(「nihao 「) == 7;

實際上陣列是一種資料型別,並不是簡單的連續的空間,是有型別記錄的,當陣列作為形參傳遞給函式的時候,會退化為字元型指標,雖然可以用陣列的方法使用malloc申請的連續堆空間,並且不會報錯,但是陣列和連續的空間是有區別的,特別當字元型指標作為形參代替陣列作為形參,往往會報錯。

關於字元陣列和字元指標

include void main 對於字元陣列a,其中的內容是可以改變的。可以再次對某個元素賦值 如 a 2 r 正確 a中存放首字元的位址,但不可被改變。a adeafsa 錯誤 對於字元指標變數p,它指向了乙個字串常量,而常量被儲存在常量區,是不可改變的 如 p r 錯誤 不過可以對指標變數p...

關於字串陣列,指標定義陣列

今天測了乙個程式,發現了一些不懂的問題,下面貼上 和自己的一些想法。1.用指標指向乙個字串,並嘗試修改字串。char p hello p 2 c printf the word is s n p 編譯沒有問題,但是執行沒有任何的輸出。我們都知道p指向 hello 的首字母 h 的位址,但printf...

字元陣列與字元型指標變數

int p 5 由於 的優先順序高。所以p先與 5 結合,p是長度為5的指標陣列,每個元素都為指向指標變數的指標。字元型指標就是儲存字元型資料記憶體單元的位址。字元陣列,是將字串放到為陣列分配的儲存空間去 字元型指標變數,是將字串存放到記憶體,然後將字串的記憶體起始位址送到指標變數中 字元陣列與指標...