我正在温习 C++,偶然发现了关于字符串、字符数组和空字符的奇怪行为 ('\0'
)。下面的代码:
#include <iostream>
using namespace std;
int main() {
cout << "hello\0there"[6] << endl;
char word [] = "hello\0there";
cout << word[6] << endl;
string word2 = "hello\0there";
cout << word2[6] << endl;
return 0;
}
产生输出:
> t
> t
>
幕后到底发生了什么?为什么字符串文字和声明的字符数组存储't'
在索引 6 处(在内部之后)'\0'
),但声明的字符串没有?
据我记得,前两个本质上只是一个数组,打印字符串的方式是继续打印直到\0
遇到了。因此,在前两个示例中,您从字符串中第 6 个字符的点偏移开始,但在您的情况下,您打印出第 6 个字符,即t
.
会发生什么string
类的特点是它将字符串复制到它自己的内部缓冲区中,并通过将字符串从数组的开头复制到第一个来实现这一点\0
它发现。就这样t
不存储,因为它出现在第一个之后\0
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)