C:字符串错误打印两次

Har*_*son 3 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;
}
Run Code Online (Sandbox Code Playgroud)

打印以下内容:

Harry Rosie RonaldRosie
Run Code Online (Sandbox Code Playgroud)

为什么“Rosie”会打印两次?

jo3*_*3rn 6

Ronald有 6 个字母,因此char player3[6]空终止符没有空格'\0'

在您的情况下,它会打印Ronald内存中出现的任何内容,直到'\0'遇到a 为止。那恰好是Rosie。在找到'\0'.

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

char player3[7] = "Ronald";
Run Code Online (Sandbox Code Playgroud)

  • “因此,它将打印内存中 Ronald 之后的任何内容,直到找到 \0。” 是多种可能性之一,因为将“%s”与非字符串一起使用是_未定义的行为_。 (3认同)