在 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=]'};
我知道我应该把 '/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=]'};