当我的字符串在 C 程序中包含空字符时?

When my string contain null character in c program?

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

我的代码示例

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

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

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 字节。

的第一个参数
printf("%.2f %.2f %.2f %.2f", ...

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

问:如果我像在我的代码中一样使用 printf,C 程序是否会自动在打印或不打印的字符串末尾添加空终止符?
答:不会。printf() 通常不会打印终止空字符 '[=11=]'。相反,"%.2f %.2f %.2f %.2f" 导致输出如“1.12 2.23 3.34 4.45”,最后一个字符打印为 '5'.

[编辑]
格式 "%.2f %.2f %.2f %.2f" 是一个以空终止符 '[=11=]' 结尾的字符串。 printf() 的打印输出没有打印 '[=11=]'。格式中的空终止符 '[=11=]'printf() 发出停止信号。不打印空终止符 '[=11=]' 本身。

注意:在 C 中,C 字符串 总是有一个终止空字符 '[=11=]'。如果 char 的数组不包含一个,则它不是字符串。所以上面例子中printf()输出的不是一个字符串,而只是一串字符。