1

我正在使用函数“strdup”将 char* 插入 char** 并收到search.c:174:13: warning: assignment makes pointer from integer without a cast [enabled by default]警告。

char** temp;
...

temp = NULL;
...

temp[0] = strdup(tokens[i]);

wheretokens[i]只是strtok()函数中的一个字符串。

我不认为这是相关的,但我也有这个警告...... search.c:174:5: warning: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]这只是因为我有 -ansi 标志并且我检查了该功能是否正常工作,我只是讨厌看到警告。

如果这个问题得到回答,我也很抱歉;有很多与此类似的问题,但没有一个对我有帮助,因为据我所知,我的类型是匹配的。(如果我收到警告,显然不是)

4

3 回答 3

6

我不认为这是相关的,但我也有这个警告...... search.c:174:5: 警告:函数“strdup”的隐式声明 [-Wimplicit-function-declaration]

这是相关的,两者都有相同的原因。范围内没有原型strdup,因此假定返回类型为int(在 C89/C90 中;隐式声明已在 C99 中删除,但默认情况下仍被广泛接受)。

您需要#include <string.h>并启用其中一个可以定义的功能测试宏strdup,例如_XOPEN_SOURCE >= 500or _BSD_SOURCE(甚至可能只有在没有 的情况下才能工作-ansi)。

于 2012-11-17T01:11:33.297 回答
5

GCC 的-ansi标志为旧的 ISO C90 标准设置了兼容模式。strdup在该标准中没有定义;这是一个 POSIX 函数。要么摆脱-ansi用于编译严格符合 C90 的代码的标志,要么通过避免使用 POSIX API 来遵守标准。

于 2012-11-17T01:15:18.610 回答
1

你可能忘记了#include一些文件。我的猜测是您应该在任何函数之前和源文件开头附近添加:

#include <string.h>
于 2012-11-17T01:11:48.983 回答