[英]Why is my printf formatting not working with GCC but is running on Windows
我們只是在指針上做了一個關於C的課程,我在linux機器上運行示例代碼時遇到了麻煩(Mint 17 64 bit)雖然它在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: %x\n", &var);
//address stored in pointer variable
printf("Address stored in ip variable: %x\n", ip);
//access the value using the pointer
printf("Value of *ip variable: %d\n", *ip);
return 0;
}
該程序在具有代碼塊ide的Windows上按預期運行,但在linux上嘗試使用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: %x\n", &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: %x\n", ip);
^
我想知道發生了什么以及如何讓代碼在linux上運行。
%x
格式說明符需要unsigned 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("%p\n", (void *) ip);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.