我正在尝试使用 %s 打印 int 数组。但它不起作用。任何想法为什么?
#include<stdio.h>
main() {
int a[8];
a[0]='a';
a[1]='r';
a[2]='i';
a[3]='g';
a[4]='a';
a[5]='t';
a[6]='o';
a[7] = '\0';
printf("%s", a);
}
它只打印一个。我也尝试过short,但它也不起作用。
想想整数的表示方式——如果必须的话,使用调试器。查看内存,您会看到大量的 0 字节,并%s
在达到 0 字节时停止。
它只打印一个。
这就是为什么它只打印a
. 之后它遇到一个 0 字节并停止。
这是因为您正在尝试打印一个 int 数组,其中每个元素的大小为 4 字节(至少在 32 位机器上为 4 个字符)。printf()
将其解释为 char 数组,因此第一个元素看起来像:
'a' \0 \0 \0
to printf()
。在它找到printf()
的第一个停止时\0
,它只打印'a'。
请改用 char 数组。
因为您将 a 声明为整数,所以您初始化的那些符号字符会导致错误。您必须将其更改为 char 变量。但是为了节省时间,只需使用星号字符使变量成为指针,然后您就可以使用双引号创建单个字符串。
int a[8]
means array of 8 ints or 8*(4 bytes)
- Say 32 bit architecture
a[0] = 'a'
stores in the first int index as 'a''\0''\0''\0'
a[1] = 'r'
as 'r''\0''\0''\0'
and so on . . .
%s
represents any C-style string ie. any string
followed by a '\0'
character
So
printf("%s", a);
searches for trailing '\0'
character and just prints "a" assuming it is the entire string