我有一个使用 memcpy() 组成的字符串(展开时)如下所示:
char* str = "AAAA\x00\x00\x00...\x11\x11\x11\x11\x00\x00...";
我想打印字符串中的每个字符,如果该字符为空,则打印出来"(null)"
作为 '\0' 的替代品。
如果我使用像 put() 或 printf() 这样的函数,它只会在第一个 null 处结束并打印出来
AAAA
那么我怎样才能让它打印出实际的单词“(null)”而不将其解释为字符串的结尾呢?
您必须自己进行映射。如果你愿意的话,那就是。在 C 中,字符串以 null 结尾。因此,如果您使用格式化输出函数,例如printf
or puts
并要求它打印一个字符串(通过格式说明符%s
)它会停止打印str
一旦它达到第一个空值。没有null
C 中的单词。如果您确切知道 C 中有多少个字符str
您也可以循环遍历它们并单独打印出字符,并将0
通过您选择的助记符。
草案7.21.6.1/8说:
p参数应该是一个指向 void 的指针。指针的值为
转换为打印字符序列,在
实现定义的方式。
然而,以下情况:
$ 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如果不存在 l 长度修饰符,则参数应为指针
到字符类型数组的初始元素。280) 字符
数组中的内容被写入(但不包括)终止处
空字符。如果指定精度,则不超过那么多
字节被写入。如果未指定精度或精度更高
大于数组的大小,则数组应包含空字符。
依靠这种行为可能会带来惊喜!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)