'printf'在没有强制转换的情况下从整数生成指针

时间:2017-10-11 19:05:16

标签: c printf unsigned

我真的是新C,我试图在C中运行以下代码:

#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, ...);

我不确定这里有什么问题。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

您不能对printf语句使用单引号。试试这个:

printf("%d", j);

答案 1 :(得分:2)

'%d'是一个多字符文字,因为您在单引号字符中包含多个字符。它的值是实现定义的,但C标准坚持认为它是int类型。 (因此编译器诊断&#34;来自整数的指针&#34;)。

您想要"%d",而是使用双引号字符。

printfconst char*指针作为第一个参数。形式上"%d"const char[3]类型,但是通过一种称为指针衰减的机制,它成为第一个参数的合适值。