3
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, " ");
}

在编译过程中出现了警告:

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

我能做些什么?

4

3 回答 3

2

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

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

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

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

parts[j] = strdup(p);
于 2012-10-17T00:46:17.747 回答
0

您在实际代码中使用这一行吗?

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

您正在将整个缓冲区设置为空格。并设置numsizeof(buff)

因此,换句话说,这可能无法将您定位在您想要的位置:

 char **parts[num];
于 2012-10-17T01:02:06.433 回答
0
char *parts[num];

         

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

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

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

于 2012-10-17T00:38:08.367 回答