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是。
我该怎么办?
答案 0 :(得分:2)
我假设您希望将单个令牌存储在数组中。正如当前声明的那样,parts
是一个指向指针的数组。这不是你想要的C字符串数组 - 你需要删除一个星号:
char *parts[num]; // This requires at least C99
请注意,num
需要从1
开始,而不是0
,因为您要获得的令牌数量大于您将使用的空格数量在字符串中找到。
一旦你这样做,你的程序仍然需要处理strtok
结果的方式:你应该不存储结果,以便在下次调用{{1因为这些结果无效。相反,您应该在将令牌存储到strtok
数组中之前复制令牌:
parts
答案 1 :(得分:0)
char *parts[num];
你可以声明一个指向上面声明的指针数组的指针,如下所示:
char *(*ptr)[num] = &parts;
但是您不需要这种额外级别的间接来存储字符串数组
答案 2 :(得分:0)
您是否在实际代码中使用此行?
for(i = 0; i < sizeof(buff); i++) if(buff[i] = ' ') ++num;
您正在将整个缓冲区设置为空格。并将num
设置为sizeof(buff)
因此,换句话说,这可能无法将您定位在您想要的位置:
char **parts[num];