2017-10-11 9 views
2

なし整数からポインタになり、私は本当に新しいCと私はCに次のコードを実行しようとしています:「のprintf」のキャスト

#include <stdio.h> 
int main() 
{ 
    unsigned long i = 1UL << 2; 
    int j = (i==4); 
    printf('%d', j); 
    return 0; 
} 

しかし、それはエラーを与えている:

prog.c: In function 'main': 
prog.c:6:10: warning: multi-character character constant [-Wmultichar] 
    printf('%d', j); 
     ^
prog.c:6:10: warning: passing argument 1 of 'printf' makes pointer from integer without a cast [-Wint-conversion] 
In file included from prog.c:1:0: 
/usr/include/stdio.h:362:12: note: expected 'const char * restrict' but argument is of type 'int' 
extern int printf (const char *__restrict __format, ...); 

私はここで何が間違っているのか分かりません。どんな助け?

+6

一重引用符。文字列 "%d"には二重引用符を使用してください。 – phoxis

答えて

3

printf文には一重引用符を使用できません。あなたは、単一引用符文字に複数の文字を同封てきたように、複数文字リテラルである

printf("%d", j); 
2

'%d':これを試してみてください。その値は実装定義ですが、C標準ではintタイプと主張しています。 (したがって、コンパイラは "整数からのポインタ"を診断します)。

代わりに"%d"が必要です。これは二重引用符を使用します。

printfは、最初の引数としてconst char*ポインタをとります。形式的には、"%d"const char[3]タイプですが、というポインタの崩壊メカニズムを使用すると、最初の引数に適した値になります。