在C中,以以下方式将整数转换为字符数组有什么区别?
我通过以下方式将整数转换为字符数组,但我不明白使用print时有什么区别(因为在这两种情况下我都在打印字符数组): 但是,以下方法返回错误:在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",
// 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希望用作参数的指针指向字符串。