将C样式字符串初始化为NULL与空字符串之间的区别

时间:2014-10-26 05:52:53

标签: c++ c string

这三者是否相同:

char* p= NULL;
char* q = "";
char r[] = {'\0'};

我怀疑第一个与其他人不同,但我并不完全确定。

3 个答案:

答案 0 :(得分:5)

我正在回答C ++,即使OP 将问题标记为C.这是两种不同的语言。将它们混为一谈并不是一个好主意。

此声明:

char* q = "";

在C ++ 03中使用了不推荐的转换,在C ++ 11中变为无效。我们现在在C ++ 14。


这两个声明:

char* p= NULL;
char r[] = {'\0'};

根本不同。第一个声明指针并将其设置为null。第二个声明一个项目的数组,该项目设置为null。


关于

  

这三个是等价的

答案是否定的,完全没有:一个是无效的,一个是声明一个指针,一个是声明一个数组。

答案 1 :(得分:2)

char* p = NULL;

这会将指针 p分配给NULL,这意味着p不会指向任何有效的内存地址。

char* q = "";
char r[] = {'\0'};

这些都创建空字符串,基本相同。 q指向有效的内存地址,与前一个示例中的p不同。 r是一个空字符串数组。

答案 2 :(得分:1)

char* p= NULL; // initializes the character pointer to NULL
char* q = ""; // character pointer points to a valid string with null content
char r[] = {'\0'}; // character array having null content