#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *s;
s = strdup("foo");
printf("%s\n", s);
getchar();
return 0;
}看起来很无害,不是吗?但是我的IDE,也就是Dev-C++,给出了以下警告:警告:赋值使指针从整型变为无类型转换
如果您按如下方式更改代码,则该警告将消失:
char *s;
s = (char*)strdup("foo");

有人能帮我解释一下吗?
发布于 2012-11-16 14:04:40
您正在使用Dev- C++,但是strdup不是C或C++标准的一部分,它是一个POSIX函数。您需要定义适当的预处理器符号(根据IDE的文档),以便头文件声明strdup ...这是必要的,以便头文件在包含到符合C或C++标准的源文件中时不会污染名称空间。
对于简单的便携替代方案,请考虑
char* mystrdup(const char* s)
{
char* p = malloc(strlen(s)+1);
if (p) strcpy(p, s);
return p;
}或者,如果你知道strdup实际上在库中,你可以将它的声明从string.h复制到你自己的源文件或头文件中……或者使用手册页中更简单的声明:
char *strdup(const char *s);发布于 2012-11-16 13:43:16
那是不对的。strdup已经返回了char *。还有一些地方不对劲。可能是因为您没有包含正确的头文件来声明此函数的真正返回类型。
#include <string.h>发布于 2012-11-16 13:44:25
你要错过#include <string.h>了。在没有函数签名的情况下,编译器假定strdup返回一个int,因此出现警告。
https://stackoverflow.com/questions/13411125
复制相似问题