【问题标题】:How to check if char **str is empty? (C)如何检查 char **str 是否为空? (C)
【发布时间】:2014-03-16 12:03:58
【问题描述】:

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

char **str = "";

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

【问题讨论】:

  • char ** 是一个指向 char 数组的指针。你的任务将不起作用。我不知道有什么方法可以始终从数据中分辨出垃圾;这就是为什么main() 带有参数数量的原因。
  • 你知道C中字符串的类型是什么吗?
  • 这两个答案都是正确的。 :)
  • @SeanPedersen:从技术上讲,argc 是多余的,因为argv[argc] == 0(这是有保证的,argv 的任何先前元素都不会为空,尽管参数可能为空 - 指向的有效指针一个空字节)。但是,无需计算即可知道有多少参数是很方便的。
  • @JonathanLeffler 我不记得在任何地方……读过。谢谢! (还在学习这些签名的东西——那张贴到你的收件箱了吗?)

标签: c string


【解决方案1】:

编译器告诉您"" 不是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 **str。当我切换到 char **str = &data;我的“如果(**str == 0)”有效。谢谢
  • null 和 empty 有什么区别?乔纳森,谢谢
  • 空指针在源代码中由 0 表示,但在硬件中并不正式要求所有位为零,尽管这是迄今为止空指针最常见的表示。空字符串由指向零(空)字节'\0' 的有效指针表示。因此,null 有点含糊不清,尽管它通常表示空指针,并且在没有限定符(“空字节”)的情况下,提及“空”应假定为空指针。
  • 谢谢乔纳森,我对快速回复感到惊讶,感谢:)
【解决方案2】:

**str == 0 非常适合检查str 是否指向指向空字符串的指针。您的问题是 char **str = ""; 是非法的,因为 "" 不是指向指针的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-29
    • 2013-07-20
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2013-12-16
    相关资源
    最近更新 更多