ASCII 值 = 0 和 '\0'

2024-03-19

我读过了这个帖子 https://stackoverflow.com/questions/11294850/the-ascii-value-of-0-is-same-as-ascii-value-of-0。 但是当我尝试时:

  printf("before null %c after null\n", 0);  // (ASCII=0) != '\0' ??

而不是得到:

before null 

I got:

before null   after null

所以我的问题是: ASCII 值 0 实际上等于 '\0' 吗?


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取决于您的终端模拟器...它可能根本不显示,它可能显示为空格,或者可能有一个有趣的框符号...

需要注意的重要一点是,这发生在运行时 - 而不是编译时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASCII 值 = 0 和 '\0' 的相关文章

随机推荐