簡體   English   中英

為什么我的printf格式不能與GCC一起使用,而是在Windows上運行

[英]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 )或無符號十六進制表示法( xX

如果任何參數不是相應轉換規范的正確類型,則行為未定義

請注意,對於指針,您應該使用%p格式說明符而不是%x%d ,例如:

printf("%p\n", (void *) ip);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM