在我的C代码中。我有char ** str,需要检查字符串是否为空。我编写了以下代码,因为它适用于char * str,但我得到了错误:警告:从编译器中的不兼容指针类型初始化和运行编译代码时的“分段错误”。检查** str是否为空的正确方法是什么?感谢
char **str = "";
if (**str == 0)
printf("it's an empty string\n");
答案 0 :(得分:5)
编译器告诉您""
不是char
指针的地址,这应该存储在char **str
中。您正在存储空字节的地址并在str
中确定后续字符,然后尝试将其视为地址 - 这不是幸福的秘诀。
也许你在考虑:
char *data = "";
char **str = &data;
if (str == 0) // Is str a null pointer (answer: no)
…report that str is a null pointer…
if (*str == 0) // Does str point at a null pointer (answer: no)
…report that str points at a null pointer…
if (**str == '\0') // Is the string pointed at empty (answer: yes)
…report empty string…
答案 1 :(得分:4)
**str == 0
完全可以检查str
是否指向空字符串的指针。您的问题是char **str = "";
是非法的,因为""
不是指向指针的指针。