char * str为null和str [0] ==' \ 0'之间有什么区别?

时间:2012-06-04 18:26:50

标签: c string pointers char

我有一个指针char *str;

对于特定情况,if (!str)不是NULL而是str[0] == '\0',这是怎么回事?

修改:0 感谢所有的回复。基本上我需要在strlcpy()中将此字符串作为源参数传递,这是一个下垂故障,因为这是一个空字符串。看来我需要这样的检查:if (!str || str[0] == '\0')而不是传递给strlcpy()。听起来不错吗?

6 个答案:

答案 0 :(得分:1)

str[0] == '\0'用于表示空字符串 - 长度为0的字符串。

答案 1 :(得分:1)

\0是空字节或空终止符。因此,它被视为无效。 C字符串以空值终止。也就是说,第一次看到空字节时,该字符串被认为是完整的。除\0以外的任何内容均为NULL时。

如果你有超出这个字节的信息(这是字符串的坏习惯),你可以尝试检查str+1哪个会提前传递空字节。无论如何,str+1等很可能是垃圾数据并导致无效的内存访问(导致程序崩溃)。

答案 2 :(得分:1)

当str中的有效(非NULL)指针指向包含单个\0字符的内存地址时,可能会这样做。

答案 3 :(得分:1)

char *str = "";

然后str是指向空字符串的指针,它不是NULL而是*str == str[0] == 0

答案 4 :(得分:1)

str在内存中保存一个地址 - char的地址。

只有当str的值不是(!str)时,

NULL才会返回false。换句话说,当str没有引用地址NULL时,这是一个不可用的内存地址。

*str包含char。当str指向的字符为NULL时,(str[0] == '\0')将返回true:str指向空字符串。

答案 5 :(得分:1)

你正在处理两件事:

首先,char * str是一个指针。如果它为NULL,则它不指向有效内存,并且您不能将其取消引用为str[0]*char

其次,str[0] =='\ 0'`表示你有一个指向有效内存的指针,str指向的内存中字符串中的第一个位置是'\ 0',一个字符串终止子。