char *s1 = "";
char *s2 = NULL;
我只想知道區別
uj5u.com熱心網友回復:
一個是指向單個元素陣列的第一個char元素,該元素是字串 null-terminator character '\0'。
另一個變數是初始化指向的,NULL這意味著它實際上并不指向任何地方。
稍微簡化一下,定義
char *s1 = "";
相當于
char private_array[1] = { '\0' };
char *s1 = &private_array[0];
同時擁有一個字串空終止符和一個通用空指標可能看起來令人困惑,但它會隨著更多的經驗而自我清除。
另請注意,在 C 中,所有文字字串(甚至"")都是不可修改的,它們本質上是read only。這就是為什么建議始終使用const char *指向文字字串的原因。
uj5u.com熱心網友回復:
""使用葉子有很大的不同'\0',而NULL將指標保留為((void *)0).
這可以通過取消參考指標來測驗,例如:
注意:取消參考指標意味著訪問其內部值或元素,這是使用C/C 中的*一元運算子或運算子完成的。[]
“”
#include <stdio.h>
int main(void){
char *s1 = "";
printf("%d", *s1);
return 0;
}
我正在列印*s1因為'\0'在終端上看不到的整數表示。
輸出:
0
程式回傳0,這意味著成功。
空值
#include <stdio.h>
int main(void){
char *s2 = NULL;
printf("%d", *s2);
return 0;
}
上面的程式沒有列印任何東西stdout,但是它回傳了139,這意味著程式在退出之前就崩潰了(分段錯誤)。
你可以在網上試試。
uj5u.com熱心網友回復:
空字串有一個元素,即空字符'\0'. 那仍然是一個字符,字串的長度為零,但它與 a 不同NULL,后者根本沒有字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448218.html
標籤:C
