【发布时间】:2019-06-30 13:13:40
【问题描述】:
我对 \0 的一些功能感到困惑。
我知道 \0 是一个空字符,它是一个表示形式是字符串的术语。
int j;
j = printf("abcdef\0abcdefg\0");
printf("%d", j);
return 0;
当我尝试打印 "abcdef\0abcdefg\0" 时,C 只会打印字符串 'abcdef' 和 '6' 而不是 'abcdef' 和 'abcdefg' 的总和为 13。为什么会发生这种情况?
【问题讨论】:
-
从 printf 的角度来看,您的字符串是“abcdef”。为什么你期望它必须在第一个空字符之后继续?
-
字符串文字中可以包含任何字符(包括 \0),但库函数通过它们看到的第一个 \0 来确定字符串的结尾。
-
@bruno 我认为 printf 会认为里面有两个字符串。我一定是误会了什么。
-
@skkupharah printf 无法知道字符串是如何构建/来的,它不知道您使用的是文字字符串,也不知道您是如何定义它的。与任何管理字符串的函数一样,字符 0 表示结束,仅此而已
-
@skkupharah 字符串文字只是内存中的一系列任意字节,C 中没有字符串类型。 printf() 或任何其他字符串函数只能在内存中获取地址,并且必须“将其发送” " 从那里,找到的第一个 \0 被视为字符串的结尾并停在那里。
标签: c