如何检查char**str是否为空?(C)

如何检查char**str是否为空?(C),c,string,C,String,在我的C代码中。我有char**str,需要检查字符串是否为空。我编写了以下代码,因为它适用于char*str,但我得到了错误:警告:编译器中不兼容指针类型的初始化和运行编译代码时的“分段错误”。检查**str是否为空的正确方法是什么?谢谢 char **str = ""; if (**str == 0) printf("it's an empty string\n"); 编译器告诉您,“不是char指针的地址,它应该存储在char**str中。你在str中存储一个空字节和不确定字符的

在我的C代码中。我有char**str,需要检查字符串是否为空。我编写了以下代码,因为它适用于char*str,但我得到了错误:警告:编译器中不兼容指针类型的初始化和运行编译代码时的“分段错误”。检查**str是否为空的正确方法是什么?谢谢

char **str = "";

if (**str == 0)
   printf("it's an empty string\n");

编译器告诉您,
不是
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…

编译器告诉您,
不是
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…


**str==0
可以很好地检查
str
是否指向指向空字符串的指针。你的问题是
char**str=“”
是非法的,因为
不是指向指针的指针。

**str==0
检查
str
是否指向指向空字符串的指针是完全正确的。你的问题是
char**str=“”是非法的,因为
不是指向指针的指针。

char**
是指向
char
数组的指针。你的作业不起作用。我不知道有什么方法可以把垃圾和数据区分开来;这就是为什么
main()@SeanPedersen:从技术上讲,
argc
是冗余的,因为
argv[argc]==0
(这是可以保证的,并且
argv
的任何先前元素都不会为null,尽管参数可能为空-指向null字节的有效指针)。然而,不必计算它们,就可以方便地知道有多少个论点。@JonathanLeffler我不记得在任何地方读到过。。。曾经谢谢(仍然在sign things上学习这些-那篇文章发到你的收件箱了吗?
char**
是指向
char
数组的指针。你的作业不起作用。我不知道有什么方法可以把垃圾和数据区分开来;这就是为什么
main()@SeanPedersen:从技术上讲,
argc
是冗余的,因为
argv[argc]==0
(这是可以保证的,并且
argv
的任何先前元素都不会为null,尽管参数可能为空-指向null字节的有效指针)。然而,不必计算它们,就可以方便地知道有多少个论点。@JonathanLeffler我不记得在任何地方读到过。。。曾经谢谢(在sign things上仍在学习这些-这篇文章发到你的收件箱了吗?)是的,没错,我的问题是将“”分配给char**str。当我切换到char**str=&data;我的“if(**str==0)”有效。谢谢你空和空有什么区别?Jonathan,thanksA空指针在源代码中用0表示,但在硬件中并不正式要求所有位都为零,尽管这是空指针最常见的表示形式。空字符串由指向零(空)字节的有效指针表示,
'\0'
。因此,null有点含糊不清,尽管它通常意味着一个null指针,并且在没有限定符(“null字节”)的情况下,提到“null”应该被认为是一个null指针。感谢Jonathan,我对快速回复感到惊讶,请欣赏:)是的,对,我的问题是将“”分配给char**str。当我切换到char**str=&data;我的“if(**str==0)”有效。谢谢你空和空有什么区别?Jonathan,thanksA空指针在源代码中用0表示,但在硬件中并不正式要求所有位都为零,尽管这是空指针最常见的表示形式。空字符串由指向零(空)字节的有效指针表示,
'\0'
。因此,null有点含糊不清,尽管它通常意味着一个null指针,在没有限定符(“null字节”)的情况下,提到“null”应该被认为是一个null指针。谢谢Jonathan,我对快速回复感到惊讶,感谢:)