gpt4 book ai didi

c - 如何打印带有嵌入空值的字符串,以便用 "(null)"替换 '\0'

转载 作者:行者123 更新时间:2023-12-04 18:20:21 25 4
gpt4 key购买 nike

我有一个使用 memcpy() 组成的字符串(扩展时)如下所示:

char* str = "AAAA\x00\x00\x00...\x11\x11\x11\x11\x00\x00...";

我想打印字符串中的每个字符,如果字符为空,打印出 "(null)"作为'\0'的替代品。

如果我使用 puts() 或 printf() 之类的函数,它只会在第一个 null 处结束并打印出来
AAAA

那么我怎样才能让它打印出实际的单词“(null)”而不将它解释为字符串的结尾呢?

最佳答案

您必须自己进行映射。如果你愿意,那就是。在 C 中,字符串以空值结尾。因此,如果您使用格式化输出函数,例如 printfputs并要求它打印一个字符串(通过格式说明符 %s )它会停止打印 str一旦它达到第一个空值。没有null C 中的单词。如果您确切知道 str 中有多少个字符您不妨循环遍历它们并单独打印字符,替换为 0通过您选择的助记符。

草案说 7.21.6.1/8:

p The argument shall be a pointer to void. The value of the pointer is converted to a sequence of printing characters, in an implementation-defined manner.



但是,以下内容:
$ cat null.c
#include <stdio.h>
int main() {
printf("%p\n", (void *)0);
}

产生:
00000000

在 gcc 4.6 和 clang 3.2 上。

然而,深入挖掘:
$ cat null.c
#include <stdio.h>
int main() {
printf("%s\n", (void *)0);
}

确实产生了所需的输出:
(null)

在 gcc 和 clang 上。

请注意,该标准不强制要求:

s If no l length modifier is present, the argument shall be a pointer to the initial element of an array of character type.280) Characters from the array are written up to (but not including) the terminating null character. If the precision is specified, no more than that many bytes are written. If the precision is not specified or is greater than the size of the array, the array shall contain a null character.



依靠这种行为可能会导致意外!

关于c - 如何打印带有嵌入空值的字符串,以便用 "(null)"替换 '\0',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10809711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com