C中printf输出中的附加"12"

Abr*_*ham -1 c string null character

我编写了以下程序来了解\0角色在C程序中的工作原理:

#include <stdio.h>

int main(void) {
    char a[] = {'1','2','\0','2'};
    int i=0;
    for (i=0; i<4; i++){
        printf("%c\n",a[i]);
    }
    printf("%s",a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

嗯,没关系,我有以下输出:

sh-4.3$ gcc -o main *.c                                                                                          
sh-4.3$ main                                                                                                     
1                                                                                                                
2                                                                                                                

2
Run Code Online (Sandbox Code Playgroud)

但是当我\nprintf命令中删除字符时,我12在输出中收到一个额外的:

//. Same as above
    for (i=0; i<4; i++){
        printf("%c",a[i]);
    }
//. Same as above
Run Code Online (Sandbox Code Playgroud)

输出是:

12sh-4.3$ gcc -o main *.c                                                                                        
sh-4.3$ main 
12212
Run Code Online (Sandbox Code Playgroud)

虽然我认为我必须看到这个:

12sh-4.3$ gcc -o main *.c                                                                                        
sh-4.3$ main 
122
Run Code Online (Sandbox Code Playgroud)

请注意,我使用此在线编译器来编译上述程序.这是GNU GCC v4.8.3

Dan*_*bbs 5

12你得到的额外的是从printf("%s",a);线:

  • 通过循环迭代打印出来的文字1,2,空(无),和2.
  • 打印出来的字符串a打印到空字符(\0),所以12.

这就是你获得输出的原因12212.


使用换行符打印输出1,2新行2,以及12单独的行.

在你的例子中,你错过了最后一个,12因为你最后没有新行,所以你的shell提示符被打印出来:在你的问题中注意你12sh-4.3$在其中一行的开头.