【发布时间】:2021-01-26 19:10:27
【问题描述】:
基本上我想知道是否有办法在缓冲区中保留空字节?
例子:
#include <stdio.h>
int main()
{
char buf[] = "hello there\x00, Hi";
printf("%s\n", buf);
return 0;
}
不幸的是,如果您在上面进行编译,您将得到的输出仅为hello there(由\x00 终止的null)。那么有没有办法将空字节保留在堆栈中并在此之后也获得Hi?
仅供参考,如果你想建议用\\x00 转义\,我不能这样做。
【问题讨论】:
-
如果您将其视为字符串,则在字节数组中嵌入 0 会很棘手。你能解释一下你为什么想要这个吗?听起来你实际上想要别的东西。
-
由于
%s在第一个空字节处停止处理,因此无法通过对printf()的简单(单个)调用来完成。你想要输出什么?您也可以使用fwrite(buff, sizeof(buff) - 1, 1, stdout);写入空字节(后跟putchar('\n');输出换行符)。 -
“,嗨”也在堆栈中(在
buf中)。它只是没有打印出来。 C 风格的字符串不能包含 '\0',因为这是它用来确定字符串结尾的标记值。