C:字符串错误打印两次

时间:2021-02-23 16:59:12

标签: c string printf

我正在使用 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”会打印两次?

1 个答案:

答案 0 :(得分:6)

Ronald 有 6 个字母,因此 char player3[6] 没有为空终止符 '\0' 留出空间。

在您的情况下,它会打印内存中 Ronald 之后的任何内容,直到遇到 '\0'。那恰好是Rosie。在找到 '\0' 之前,您可能并不总是那么幸运并遇到错误(例如内存保护)。

一种解决方案(除了您如何初始化 HarryRosie)是将元素的数量增加 1 以为尾随 '\0' 提供空间:

char player3[7] = "Ronald";
相关问题