为什么std::cout可以打印char[]
Why can std::cout print a char[]?
下面的代码打印整个字符串。我不明白为什么会这样。
char test[] = "jeff";
cout<<test<<endl;
输出是"Jeff",我期望它打印字符数组"test"的值,因为test是指针,指针指向第一个元素'J'。
为什么打印整个字符串,当我cout<<test
??
因为operator<< (basic_ostream<charT,traits>& os, const char* s);
(该列表中的#2 "字符序列")(稍微更专业的列表)。test
衰减为指针,或者char*
,然后被打印为c字符串。
这与cout << "Jeff";
工作的原因完全相同(而不是打印"Jeff"
的地址)。
第一个元素当然是'j'
,但是char*
并不意味着只表示一个char
,而是它们中的string
。cout
将继续读取char
s,直到找到空字符或' '
。当您使用字符串字面值(如"jeff"
)时,它会隐式地放在那里。
要只打印第一个char
,取消对指针的引用,使其像cout<<*test<<endl;
一样。
在c++中(与C中一样),字符串被建模为以空结束的字符数组,即最后一个字符的序数值为0,在您的示例中,它的索引为4的字符,由编译器在"jeff"中的最后一个"f"之后立即插入。因此,在许多上下文中,指向"char"的指针被假定为以空结束;在这种情况下,"cout"继续打印字符,直到它在最后遇到NUL字符,此时它停止。c++还有一个实际的字符串类"std::string",它在许多方面优于字符数组。
相关文章:
- 打印标准::<char>不带无关字符的矢量
- 将char类型指定给int以打印相应的ASCII字符
- 如何在c++中多次打印char
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- C Cout如何打印一个char*
- 打印char指针的Unicode和文本值
- 以C++语言打印 CHAR 数组时出现问题
- 为什么通过添加字符串文字和char初始化时,为什么不打印字符串
- 如何打印char阵列的地址
- 返回一个指向char数组的指针.如何打印出数组的全部内容
- 控制台在打印char*some输出时停止
- LLVM-如何将ConstantExpr转换为ConstantDataArray,以便打印全局变量char*的值
- 返回的const char*不打印好弦(CPP)
- C++。为什么 std::cout << char + int 打印 int 值?
- 如何在程序本身中打印存储在 char[] 或字符串中的值
- 将int转换为char*打印
- 为什么我的字符串(char数组)不打印
- 带有字符串lib的C 打印char数组
- 你能使用 sizeof() 打印由 char * 指向的数组的大小吗?
- 如何从char*打印字符代码