
我是初学C语言的学习者。 我们只是在指针上做了一些教训,但是在我的linux机器上(Mint 17 64位)运行示例代码时遇到了困难,虽然它在windows 7(32位)上运行良好。 代码如下:
#include <stdio.h> int main() { int var = 20; //actual variable declaration int *ip; //pointer declaration ip = &var; //store address of var in pointer printf("Address of var variable: %xn",&var); //address stored in pointer variable printf("Address stored in ip variable: %xn",ip); //access the value using the pointer printf("Value of *ip variable: %dn",*ip); return 0; }
该程序运行在预期的代码块IDe的windows上,但在linux上试图编译在terminal使用GCC我得到以下错误:
pointers.c: In function 'main': pointers.c:9:2: warning: format '%x' expects argument of type 'unsigned int',but argument 2 has type 'int *' [-Wformat=] printf("Address of var variable: %xn",&var); ^ pointers.c:12:2: warning: format '%x' expects argument of type 'unsigned int',but argument 2 has type 'int *' [-Wformat=] printf("Address stored in ip variable: %xn",ip); ^
我想知道发生了什么,以及如何让代码在linux上运行。
谢谢。
linux上的哪些C ++ IDE与Visual Studio相比具有“智能感知”或更好?
尝试/捕捉MSI安装程序脚本
从SetupDiGetClassDevs获取设备接口
c ++ 11移不行有效?
在linux上编译外部库的问题
编译C ++代码时,ios :: nocreate错误
如何在运行时检查内存地址是否可写?
你如何从远程机器获得IP地址?
意外的非NulL返回
是否有可能确定对应于某些头文件的库?
%x格式说明符需要unsinged int值,否则它是未定义的行为(所以可能发生任何事情,你不能确定它在任何其他编译器或可能不同的月相)。 根据最新的C99草案, 7.19.6.1 fprintf函数 7.19.6.1 (重点矿)
o,u,x,X unsigned int参数转换为无符号八进制( o ),无符号十进制( u )或无符号十六进制符号( x或X )
如果任何参数不是相应转换规范的正确类型,则行为是不确定的 。
请注意,对于指针,您应该使用%p格式指定符而不是%x或%d ,例如:
printf("%pn",(voID *) ip);
总结以上是内存溢出为你收集整理的为什么我的printf格式现在可以使用GCC,但是在Windows上运行全部内容,希望文章能够帮你解决为什么我的printf格式现在可以使用GCC,但是在Windows上运行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)