如果我做printf会发生什么("一个\ 0两个");?

Col*_*len 1 c++ printf visual-studio

正如标题所暗示的那样,如果我在C++中这样做,打算打印的是什么:

printf("one\0two");
Run Code Online (Sandbox Code Playgroud)

?当我这样做时,GCC给了我一个警告,但是Visual Studio很好用.他们的工作方式有所不同吗?考虑到这一点,我希望printf停在第一个\ 0,但显然使用它的代码在windows上一直运行到现在为止,所以我不确定.

Cha*_*tin 8

你会得到:

$ a.out
one$
Run Code Online (Sandbox Code Playgroud)

\0是一个空结束的字符串.没有新行.

$ cat try.c
#include <stdio.h>

int
main(){
    printf("one\0two");
    return 0;
}
542 $ gcc try.c
try.c: In function ‘main’:
try.c:5: warning: embedded ‘\0’ in format
543 $ ./a.out
one544 $ 
Run Code Online (Sandbox Code Playgroud)


Jef*_*ado 5

C样式的字符串以null结尾.因此,在打印字符串时,它会将所有内容打印到第一次出现的空字符.在这种情况下,它应该打印one,没有别的.