2

我正在尝试使用 %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,但它也不起作用。

4

4 回答 4

2

想想整数的表示方式——如果必须的话,使用调试器。查看内存,您会看到大量的 0 字节,并%s在达到 0 字节时停止。

它只打印一个。

这就是为什么它只打印a. 之后它遇到一个 0 字节并停止。

于 2013-09-04T17:39:07.980 回答
2

这是因为您正在尝试打印一个 int 数组,其中每个元素的大小为 4 字节(至少在 32 位机器上为 4 个字符)。printf()将其解释为 char 数组,因此第一个元素看起来像:
'a' \0 \0 \0
to printf()。在它找到printf()的第一个停止时\0,它只打印'a'。

请改用 char 数组。

于 2013-09-04T17:40:34.743 回答
1

因为您将 a 声明为整数,所以您初始化的那些符号字符会导致错误。您必须将其更改为 char 变量。但是为了节省时间,只需使用星号字符使变量成为指针,然后您就可以使用双引号创建单个字符串。

于 2013-09-04T18:36:57.077 回答
0

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

于 2013-09-04T21:16:42.150 回答