字符数组打印输出

时间:2014-05-09 06:05:01

标签: c arrays string character

我正在尝试了解打印字符数组的输出,它在ideone.com(C ++ 4.3.2)和我的机器(Dev c ++,MinGW编译器)上给我变量输出

1)

#include<stdio.h>
main()
{
    char a[] = {'s','t','a','c','k','o'};
    printf("%s ",a);
}

它打印&#34; stacko&#34;在我的机器上,但不能在ideone

上打印任何内容

2)

#include<stdio.h>
main()
{
    char a[] = {'s','t','a','c','k','o','v','e'};
    printf("%s ",a);
}

在ideone上:它打印&#34; stackove&#34;当我运行这个程序时,只有第一次打印后续的时间 在我的dev-c上:它打印&#34; stackove .; || w&#34; 当我尝试在没有任何&#39; \ 0&#39;的情况下打印这种字符数组时,IDEAL OUTPUT应该是什么?最后,它似乎在各地提供可变产出。请帮忙 !

1 个答案:

答案 0 :(得分:2)

%s转换说明符需要一个字符串。 字符串是一个字符数组,包含终止空字符'\0',用于标记字符串的结尾。因此,您的程序本身会调用未定义的行为,因为printf超出数组访问内存的数组范围,寻找不存在的终止空字节。

您需要的是

#include <stdio.h>

int main(void)
{
    char a[] = {'s', 't', 'a', 'c', 'k', 'o', 'v', 'e', '\0'};
    //                                                    ^
    // include the terminating null character to make the array a string

    // output a newline to immediately print on the screen as
    // stdout is line-buffered by default
    printf("%s\n", a);

    return 0;
}

您还可以使用字符串文字

初始化数组
#include <stdio.h>

int main(void)
{
    char a[] = "stackove";  // initialize with the string literal
    // equivalent to
    // char a[] = {'s', 't', 'a', 'c', 'k', 'o', 'v', 'e', '\0'};

    // output a newline to immediately print on the screen as
    // stdout is line-buffered by default
    printf("%s\n", a);

    return 0;
}