C - 警告:从不兼容的指针类型缓冲区进行赋值


for(i = 0; i < sizeof(buff); i++) if(buff[i] = ' ') ++num;
char **parts[num];
char *p;
p = strtok(buff, " ");
int j = 0;
while(p != NULL)
{
         parts[j] = p;
         j++;
         p = strtok(NULL, " ");
}

在编译过程中,发出警告:

从不兼容的指针类型赋值,其中 part[j] = p 是。

我能做什么?

我假设您想将单个令牌存储在数组中。正如当前声明的那样,parts 是指向指针的指针数组。这不是你想要的 C 字符串数组 - 你需要删除一个星号:

char *parts[num]; // This requires at least C99

请注意,num需要从 1 开始,而不是从 0 开始,因为您将获得的令牌数量比您在字符串中找到的空格数大 1。

一旦你这样做了,你的程序仍然需要一些修复它处理strtok结果的方式:你不应该存储结果以供下一次调用strtok后使用,因为这些结果变得无效。相反,您应该在将令牌存储在 parts 数组中之前复制它们:

parts[j] = strdup(p);
char *parts[num];

         

您可以声明指向上面声明的指针数组的指针,如下所示:

char *(*ptr)[num] = &parts;

但是您不需要这种额外的间接级别来存储字符串数组

您是否在实际代码中使用此行?

for(i = 0; i < sizeof(buff); i++) if(buff[i] = ' ') ++num;

您将整个缓冲区设置为空格。并将num设置为sizeof(buff)

因此,换句话说,这可能不会将您定位到您想要的位置:

 char **parts[num];

最新更新