在C中,以以下方式将整数转换为字符数组有什么区别?

在C中,以以下方式将整数转换为字符数组有什么区别?,c,casting,char,type-conversion,printf,C,Casting,Char,Type Conversion,Printf,我通过以下方式将整数转换为字符数组,但我不明白使用print时有什么区别(因为在这两种情况下我都在打印字符数组): 但是,以下方法返回错误: // Note that I am exchanging only the format in the printf function printf("%s", a); // Error printf("str: %d\n", str); // Error 您正在对printf调用中输出的对象使用无效的转换说明符 在这个电话里 printf("%s",

我通过以下方式将整数转换为字符数组,但我不明白使用print时有什么区别(因为在这两种情况下我都在打印字符数组):

但是,以下方法返回错误:

// Note that I am exchanging only the format in the printf function
printf("%s", a); // Error
printf("str: %d\n", str); // Error

您正在对printf调用中输出的对象使用无效的转换说明符

在这个电话里

printf("%s", a);
printf("str: %d\n", str);
当您传递类型为
char
的对象时,转换说明符
%s
需要类型为
char*
的参数

在这个电话里

printf("%s", a);
printf("str: %d\n", str);
转换说明符
%d
在传递数组指示符隐式转换为的类型为
char*
的表达式时,需要类型为
int
的参数

例如,对于这个代码片段

char a = (char)65;
printf("%d", a);
然后将整型常量
65
强制转换为类型
char
是冗余的

你可以写信

char a = 65;

在printf调用中,您正在使用转换说明符
%d
,该说明符将字符输出为整数。也就是说,它输出ASCII字符“A”的内部表示形式。如果使用转换说明符
%c
而不是
%d
,则会得到符号
'A'

作为输出,格式说明符(
%d
等)告诉
printf
如何解释varargs参数<代码>%s等于
char*
。因此,您告诉
printf
开始从地址
65
读取字符串数据(字符数组)。该地址未分配给您的进程,因此会出现错误。第二行不是答案的错误(
printf(“str:%d\n”,str);
)Thx。只有一个问题:
printf(“%s”,a)%s
需要字符指针时,这里的
a
char
。但我认为char数组可以自动转换为char*?@MiguelWang数组,在表达式中,除了极少数例外情况,这些数组被转换为指向它们的第一个元素的指针。但在您的示例中,a不是数组。它是char类型的标量对象。此外,转换说明符%s希望用作参数的指针指向字符串。