警告:从不兼容的指针类型缓冲区分配

时间:2012-10-17 00:35:31

标签: c winapi buffer

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是。

我该怎么办?

3 个答案:

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