【问题标题】:When my string contain null character in c program?当我的字符串在 c 程序中包含空字符时?
【发布时间】:2015-03-10 08:50:42
【问题描述】:

我仍然不知道,我的 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 程序是否会自动在打印的字符串末尾添加空终止符?

【问题讨论】:

  • 也许是documentation for printf() will helpprintf 函数将结果输出发送到stdout。不发出终止符。还是你在想sprintf()
  • 抱歉,我在这里没有看到任何 字符串...
  • @SouravGhosh OP 似乎指的是printf 的输出内容,以及 it 是否以空终止符结尾(它没有)。到目前为止,下面似乎没有任何答案。我对水晶球的廉价玻璃、不圆、糟糕的借口告诉我,问题最终与标准输出重定向有关,以及该输出是否为目标设备添加了终止符。
  • @WhozCraig 是的,先生,现在我明白了。不过,直到现在,答案都令人困惑。
  • 我很困惑,这是真的吗?人们在下面给出不同的答案

标签: c string printf null-terminated


【解决方案1】:

问:如果我在我的代码中使用 printf,c 程序是否会自动在打印的字符串末尾添加空终止符?
答:没有。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'。如果char 的数组不包含一个,则它不是字符串。所以上例中printf()的输出不是字符串,而是简单的一串字符。

【讨论】:

    【解决方案2】:

    第一个参数

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • NULL != null; null== NUL == 0
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        • 2018-10-26
        • 1970-01-01
        • 2022-11-11
        • 1970-01-01
        • 1970-01-01
        • 2021-09-29
        相关资源
        最近更新 更多