#include #include #include int main() { char *s; s = strdup("foo"); printf("%sn", s); getchar(); return 0; }
看起来很无害,不是吗? 但是我的IDE,即Dev-C ++,给出了以下警告:警告:赋值从整数中生成指针而不进行强制转换
如果您要更改此代码,警告将消失:
char *s; s = (char*)strdup("foo");
任何人都可以帮我解释一下吗?
您正在使用Dev-C ++,但strdup不是C或C ++标准的一部分,它是POSIX函数。 您需要定义正确的(根据您的IDE的文档)预处理程序符号,以便头文件声明strdup …这是必要的,以便头文件在符合C或包含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);
那是不对的。 strdup
已经返回char *
。 还有别的错。 可能是因为您没有包含声明此函数的真实返回类型的正确头文件。
#include
你缺少#include
。 在没有函数签名的情况下,编译器假定strdup返回一个int,因此返回警告。
man strdup
你会得到以下的东西
#include char* strdup(const char * s);
所以strdup()
返回char*
那里shuld没有任何问题实际上在你的情况下它需要隐式声明strdup()
所以默认返回类型是int
因此你得到这个警告
要么include
要么
给出前向声明char* strdup(const char *);
所有使用完成后,也不要忘记最后free(s)
以上就是c/c++开发分享使用strdup相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562554.html