ASCII 值 0 实际上等于\0
?
Yes
字符串在内存中的存储方式和函数处理方式的差异,例如printf()
是重要的。
"before null %c after null\n"
"before null \0 after null\n"
两者都以隐式方式存储在内存中\0
终结者在最后。事实上,第二个有一个明确的\0
中间的人物改变了事情。
printf()
将扫描字符串直到“the end“,在 C 中打印组件......”the end“通常意味着直到第一次\0
/ nul特点。
对于第一个变体,printf()
将字符复制到输出,直到到达%c
指令,此时它会查看提供给函数的参数...它可能会发现您给出了'\0'
,或者它可能会发现你给了'+'
- 无论哪种方式,它都会将其复制到输出。然后它会继续将字符复制到输出,寻找“the end” 的字符串。
对于第二种变体,printf()
将开始将字符复制到输出,会发现“the end“(表示为\0
),然后停止。
如果你要使用snprintf()
,那么结果/输出将包含以下内容:(同样,隐式\0
终止)
"before null \0 after null\n"
"before null "
如果您随后要打印这两个内容,它们会look一样的,只是内存内容不一样。
然而,输出printf()
是终端(或文件)...会发生什么\0
取决于您的终端模拟器...它可能根本不显示,它可能显示为空格,或者可能有一个有趣的框符号...
需要注意的重要一点是,这发生在运行时 - 而不是编译时。