strdup警告指针来自整数w / o强制转换

时间:2012-11-17 01:09:33

标签: c warnings

我正在使用函数'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]);

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

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

如果这个问题得到解答,我也很抱歉;有很多问题类似于这一个,但没有一个帮助我,因为我可以告诉我的类型是匹配的。 (显然不是因为我收到了警告)

3 个答案:

答案 0 :(得分:6)

  

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

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

您需要#include <string.h>并启用其中一个允许定义strdup的特征测试宏,例如_XOPEN_SOURCE >= 500_BSD_SOURCE(甚至可能只有-ansi才有效)。

答案 1 :(得分:5)

GCC的-ansi标志设置旧ISO C90标准的兼容模式。该标准未定义strdup;这是一个POSIX功能。要么摆脱-ansi标志,它用于严格编译符合C90的代码,或者通过避免使用POSIX API来遵守标准。

答案 2 :(得分:1)

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

#include <string.h>