将int数组打印为字符串

时间:2013-09-04 17:36:03

标签: c string printf

我正在尝试用%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);
}

它只打印一个。 我也尝试过短片,但它也不起作用。

4 个答案:

答案 0 :(得分:2)

考虑整数的表示方式 - 如果必须,请使用调试器。查看内存,您将看到大量的0字节,%s在达到0字节时停止。

  

只打印一个。

这就是它打印a的原因。然后它遇到一个0字节然后停止。

答案 1 :(得分:1)

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

改为使用char数组。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

int a[8]表示 8整数8*(4 bytes)的数组 - 说 32 位架构

a[0] = 'a'将第一个int索引存储为'a''\0''\0''\0' a[1] = 'r''r''\0''\0''\0',依此类推。 。 。

%s代表任何 C风格的字符串即。任何string后跟'\0'字符

所以

 printf("%s", a);

搜索尾随'\0'字符,只打印“a”,假设它是整个string