【问题标题】:Typcast a null pointer to char*将空指针类型转换为 char*
【发布时间】:2010-04-26 18:43:55
【问题描述】:

假设我有一个char* elem,它应该包含一个char**,这样elem[0] = char**elem[1...m]= <more chars>。有没有办法可以在char* elem 中放置一个空指针?当我尝试设置 elem = NULL 时,它给了我一个类型错误,因为 NULL 是一个 int。

任何帮助将不胜感激!

【问题讨论】:

  • 等一下,你有一个 char* 向量并且你希望你的向量保存指向其他数据的 char 指针?这有点令人困惑,这就是我问的原因。
  • 你可能想要一个结构吗?这是一个链表吗? struct my_struct { char ** next; char data[DATA_LENGTH]; } 之类的东西?
  • 一个char * 应该指向一个char。它应该是指向char 的指针。它不应该以任何方式持有char **,尽管char ** 指向char *(当不为空时)。此外,如果您将elem 声明为任何类型的指针,则将NULL 分配给它将给出适当的空指针常量,所以我不明白您的最后一句话。请编辑此问题以包含您编写的代码,更具体地说,您正在尝试做什么。

标签: c pointers char nullpointerexception


【解决方案1】:

如果您正在寻找二进制 0,请尝试 '\0'
那是字符串末尾的空终止(char *)

【讨论】:

    【解决方案2】:

    char* 指向 char,而不是 char*。除非您的架构具有 8 位地址或您的字符比 8 位宽得多,否则您不可能将指针塞入字符中。

    【讨论】:

      【解决方案3】:

      问题不在于NULL0,它们是相同的并且表示空指针,这是与算术 0 或二进制 0 不同的概念。您的问题很可能与数组的定义有关。

      字符串大小写(指向字符的指针):

      char *s;
      s = malloc(10 * sizeof(char));
      s[0] = 'H';      /* set char */
      s[1] = NULL;     /* not ok */
      s[2] = '\0';     /* binary 0, end of string marker */
      

      指向char的指针:

      char **x;
      x = malloc(10 * sizeof(char *));
      x[0] = "Hello";  /* let it point to string */
      x[1] = NULL;     /* let it point to nowhere */
      x[2] = 0;        /* same thing as above */
      x[3] = '\0';     /* bad, expects pointer to char not char */
      

      【讨论】:

        【解决方案4】:

        如果您有一个普通的char* foo 变量,那么foo[0] 的类型将是char,因此您必须将其设置为\0(或0)。

        【讨论】:

          【解决方案5】:

          我认为你把指针弄混了。

          char* - string
          char ** - address of that string or an array of strings depending on your data
          char *** - address of an array of strings.
          

          尝试重新阅读你的作业,也许你有问题。

          乐: Jeromi 在他的评论中提到的内容有效。

          typedef struct{
          
          char** some_data
          
          }info;
          
          char* info;
          

          如果您希望某些 char** 为 NULL,只需在分配内存时将 info->some_data 初始化为 NULL。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-02-12
            • 1970-01-01
            • 2021-09-20
            • 2012-06-18
            • 1970-01-01
            • 1970-01-01
            • 2011-04-12
            相关资源
            最近更新 更多