我仍然不知道,我的 c 程序中的字符串何时包含以空字符结尾的字符串,何时不包含。
我的代码示例
...
float t0 = 2.43, t1 = 3.42, t2 = 1, t3 = 10.9;
...
printf("%.2f %.2f %.2f %.2f", t0, t1, t2, t3);
...
如果我在我的代码中使用 printf,c 程序是否会自动在打印的字符串末尾添加空终止符?
我仍然不知道,我的 c 程序中的字符串何时包含以空字符结尾的字符串,何时不包含。
我的代码示例
...
float t0 = 2.43, t1 = 3.42, t2 = 1, t3 = 10.9;
...
printf("%.2f %.2f %.2f %.2f", t0, t1, t2, t3);
...
如果我在我的代码中使用 printf,c 程序是否会自动在打印的字符串末尾添加空终止符?
问:如果我在我的代码中使用 printf,c 程序是否会自动在打印的字符串末尾添加空终止符?
A: printf()
不,典型的打印终止空字符'\0'
。而是"%.2f %.2f %.2f %.2f"
导致像“1.12 2.23 3.34 4.45”这样的输出,最后一个字符打印为'5'
.
[编辑]
格式"%.2f %.2f %.2f %.2f"
是一个以空终止符结尾的字符串'\0'
。的打印输出printf()
没有打印'\0'
. '\0'
格式中的空终止符printf()
表示停止。不打印空终止符'\0'
本身。
注意:在 C 中,C 字符串总是有一个终止的空字符'\0'
。如果数组 ofchar
不包含一个,则它不是字符串。所以printf()
上例中的输出不是字符串,而是简单的一系列字符。
第一个论点
printf("%.2f %.2f %.2f %.2f", ...
是字符串文字 ( "%.2f %.2f %.2f %.2f"
),是的,字符串文字也是 -0
终止的。
答案If i use printf like in my code, does the string that printed contain null character at the end?
是肯定的,但您不会在 printf 中看到它。
当表示为字符数组时,空终止符指示字符串的结尾。使用 printf 函数时,您将指向字符串开头的指针作为参数传递,它将打印字符串,直到 NULL 终止符。
实际上是的,如果您声明char format[]="%f %f\n";
使用 gdb 或添加一些研究代码,您将能够看到终止字符串的 nul 字节。