0

我仍然不知道,我的 c 程序中的字符串何时包含以空字符结尾的字符串,何时不包含。

我的代码示例

...
float t0 = 2.43, t1 = 3.42, t2 = 1, t3 = 10.9;
...
printf("%.2f %.2f %.2f %.2f", t0, t1, t2, t3); 
...

如果我在我的代码中使用 printf,c 程序是否会自动在打印的字符串末尾添加空终止符?

4

4 回答 4

2

问:如果我在我的代码中使用 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()上例中的输出不是字符串,而是简单的一系列字符。

于 2015-03-10T13:36:42.647 回答
1

第一个论点

printf("%.2f %.2f %.2f %.2f", ...

是字符串文字 ( "%.2f %.2f %.2f %.2f"),是的,字符串文字也是 -0终止的。

于 2015-03-10T09:19:04.603 回答
0

答案If i use printf like in my code, does the string that printed contain null character at the end?是肯定的,但您不会在 printf 中看到它。

当表示为字符数组时,空终止符指示字符串的结尾。使用 printf 函数时,您将指向字符串开头的指针作为参数传递,它将打印字符串,直到 NULL 终止符。

于 2015-03-10T08:56:12.997 回答
0

实际上是的,如果您声明char format[]="%f %f\n"; 使用 gdb 或添加一些研究代码,您将能够看到终止字符串的 nul 字节。

于 2015-03-10T09:00:34.523 回答