我有一个指针char *str;
对于特定情况,if (!str)
不是NULL而是str[0] == '\0'
,这是怎么回事?
修改:0
感谢所有的回复。基本上我需要在strlcpy()
中将此字符串作为源参数传递,这是一个下垂故障,因为这是一个空字符串。看来我需要这样的检查:if (!str || str[0] == '\0')
而不是传递给strlcpy()。听起来不错吗?
答案 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)
时, 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',一个字符串终止子。