微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于关于转换的编译器警告

我正在testing示例代码如下,为什么我在编译时通过gcc 5.6 linux ubuntu 16-4上的警告?

~/c$ gcc malloc.c malloc.c: In function 'main': malloc.c:17:14: warning: assignment makes pointer from integer without a cast [-Wint-conversion] if(number= malloc(50*sizeof(int) )== NULL)

这是我的代码

#include "stdlib.h" #include "stdio.h" int main() { char* str; int * number; if((str= (char *)malloc(100) )== NULL) { printf("malloc fail n"); exit(1); } printf ("sting was allocaed n"); if(number= malloc(50*sizeof(int) )== NULL) { printf("malloc fail n"); exit(1); } printf ("int was allocaed n"); return 0; }

closures第一个连接尝试的c ++套接

通过使用popen()的套接字执行命令

如何在login后在下一个表单中的标签显示欢迎用户名

C#WPF – registry访问不允许,即使有pipe理员权限?

C ++事件挂钩

如何使用video内存作为标准的内存存储?

在Linux API或系统调用失败后,我必须处理所有errno吗?

如何找出是否启用CONfig_FANOTIFY_ACCESS_PERMISSIONS?

良好的免费FTP客户端库(用于Windows C ++商业应用程序)?

控制台程序终止时调用特定的function

这里

number= malloc(50*sizeof(int) )== NULL

你正在分配从malloc和NULL的返回比较的结果,因为==具有比=更高的优先级。

幸运的是,编译器捕捉到了,因为number是一个指针。

你需要做的是:

(number = malloc(50*sizeof(int)) )== NULL

注意:如果您有疑问,请插入一些括号。 它不花一毛钱。

另外,你很幸运,编译器用认的警告级别捕获了这个。 在将来,总是编译与所有的警告启用 – -Wextra -pedantic ,也许加上 – -Wextra -pedantic 。

请注意,您的第一次分配是(几乎)好的:

if((str= (char *)malloc(100) )== NULL)

除了[你不应该在C中输出malloc的输出] [1]:

if((str= malloc(100) )== NULL)

甚至更好(是的,不需要乘以sizeof(char) ,它总是1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐