我正在使用 C 字符串,如以下程序所示:
#include <stdio.h>
int main(void){
char *player1 = "Harry";
char player2[] = "Rosie";
char player3[6] = "Ronald";
printf("%s %s %s\n", player1, player2, player3);
return 0;
}
打印以下内容:
Harry Rosie RonaldRosie
为什么“Rosie”会打印两次?
答案 0 :(得分:6)
Ronald
有 6 个字母,因此 char player3[6]
没有为空终止符 '\0'
留出空间。
在您的情况下,它会打印内存中 Ronald
之后的任何内容,直到遇到 '\0'
。那恰好是Rosie
。在找到 '\0'
之前,您可能并不总是那么幸运并遇到错误(例如内存保护)。
一种解决方案(除了您如何初始化 Harry
和 Rosie
)是将元素的数量增加 1 以为尾随 '\0'
提供空间:
char player3[7] = "Ronald";