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];