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

Difference between initializing a C-style string to NULL vs. the empty string

本文关键字:字符串 之间 区别 样式 初始化 NULL      更新时间:2023-10-16

这三个等价吗:

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

我怀疑第一个和其他的不同,但我不完全确定。

我是为C++回答的,尽管OP也将问题标记为C。这是两种不同的语言。把它们混为一谈不是个好主意

此声明:

char* q = "";

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


这两个声明:

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

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


关于

"这三个是等效的吗

答案是否定的,一点也不:一个是无效的,一个声明指针,一个宣布数组。

char* p = NULL;

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

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

这两者都创建了空字符串,并且基本上是等价的。q指向一个有效的内存地址,这与前面示例中的p不同。r是一个具有空字符串的数组。

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