在 C 中打印字符数组

Printing character array in C

我知道我应该把 '/o' 放在字符数组的末尾但是 当我想打印 "printf ("%s\n", kk);" , 它给出 "abcdepqrst"。为什么会这样? 这是我正在执行的程序。

#include<stdio.h>
int main()
{

char kk[]={'a','b','c','d','e'};
char s[]="pqrst";

printf("%s\n",s);

printf("%s\n",kk);

}

输出:

pqrst

abcdepqrst

我尝试通过在数组 'kk' 之前声明数组 's' 来颠倒声明数组的顺序,ideone link,但我仍然得到相同的输出。我认为这与ideone如何为变量分配内存有关。

#include<stdio.h>
int main()
{
char s[]="pqrst";
char kk[]={'a','b','c','d','e'};


printf("%s\n",s);

printf("%s\n",kk);

}

输出:

pqrst

abcdepqrst

printf() 函数需要一个空终止字符串,但您传递的是一个没有空终止符的字符数组。尝试将数组更改为:

char kk[]={'a','b','c','d','e','[=10=]'};

当您使用字符串文字语法初始化 s 数组时,会自动添加空终止符:

char s[] = "pqrst"; // s is {'p','q','r','s','t','[=11=]'}

您需要向 kk 添加一个“\0”字符,因为它是最后一个元素,如下所示:

char kk[]={'a','b','c','d','e','[=10=]'};

或者 printf 只是要 运行 离开数组的末尾。

kk 不是空终止的,所以 printf 不知道在哪里停止。在非空终止的字符串上调用 printf 未定义的行为 (UB)。这意味着您不能期望您的程序有任何特定的结果。你看到的是UB的一种表现。

您需要添加空终止符:

char kk[]={'a','b','c','d','e', '[=10=]'};