2011-12-03 122 views
-3

這段代碼編譯得很好,但是當我嘗試運行它時,它失敗了。C中的按位運算

int main(int argc, char** argv) { 
    int c = 4; 
    int b = 5; 
    int a = a & b; 
    printf(a); 

    return (EXIT_SUCCESS); 
} 

我在做什麼錯?

+1

你不定義'test'功能,或者你不叫'func'。 –

+1

「它失敗」非常模糊。它在做什麼?你期望它做什麼? – abelenky

+0

除了已經提到的所有其他的東西,如果'func()'應該檢查'x'是否是2的冪,那麼你需要檢查'x'的負值以便捕獲它是'INT_MIN'。 –

回答

4

printf的第一個參數是格式字符串,char*。有關構造格式字符串的更多信息,請閱讀this

printf(a); 

應該是:

printf("%d", a); 

否則a將作爲字符串的開頭的地址進行處理,當它的間接引用導致未定義的行爲(有它會崩潰的好機會)。

此外,我假設上述代碼不是您正在討論的確切代碼,因爲它不會按原樣編譯。

2

printf需要char *, ...而不是int。我覺得你的代碼應該是:

printf("%d", a); 

而且,你的函數名,testfunc,不匹配。但我不認爲這是問題:)

3

不知道你到底想做什麼,你的程序實際上會失敗(編譯和運行時)。

  1. 沒有頭文件,所以return (EXIT_SUCCESS);會給編譯錯誤。
  2. printf(a);是錯誤的,沒有格式說明符。實際上應該是printf("%d",a);
  3. 沒有前向聲明int func(int x)
  4. 最後看來你想叫func但最終調用test