-5

我知道我应该把'/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

4

3 回答 3

4

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

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

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

char s[] = "pqrst"; // s is {'p','q','r','s','t','\0'}
于 2015-08-27T20:18:13.647 回答
4

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

您需要添加一个空终止符:

char kk[]={'a','b','c','d','e', '\0'};
于 2015-08-27T20:18:50.820 回答
0

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

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

或 printf 只会跑出数组的末尾。

于 2015-08-27T20:18:31.077 回答