微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么当 char *s = "123" 时 s[s[3]] = '1'?

如何解决为什么当 char *s = "123" 时 s[s[3]] = '1'?

char* s = "123";
std::cout << s[s[3]] << std::endl; // prints 1
std::cout << s[3] << std::endl; // prints nothing?

我尝试运行以下代码段,第一个打印语句输出 1,而第二个输出(似乎)没有。在这里使用char指针数组的长度取消引用指针时发生了什么?

解决方法

不清楚为什么要使用 索引 3 处字符的值 (s[3]) 再次索引字符串。但无论如何,这里的关键是您使用 char 来索引数组。这意味着 char 用作数字,转换最有可能使用 ASCII 字符编码。

打印 s[3] 时什么也没有打印出来的原因是因为 s 是一个长度为 4 的字符数组,最后一个字符是空终止符。 Null 表示数字 0。空终止符标识字符串的结尾。但它不是一个可打印字符,因为它不是用来打印的。它没有与之关联的字形,因此您不会打印任何内容。

当然,您现在可以看到 s[s[3]] 只不过是 s[0],即字符“1”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。