gpt4 book ai didi

c++ - cout 两次返回一串字符

转载 作者:行者123 更新时间:2023-12-04 02:27:43 25 4
gpt4 key购买 nike

下面代码的输出是

Toto
TotoToto

但我希望只是

Toto
Toto

为什么第二个cout会重复输出中的字符串?

我在 Ubuntu 上使用 g++ 版本 7.5.0,我不确定这是否相关。

代码如下:

#include<iostream>

using namespace std;

int main(){

char c1[] = "Toto";
char c2[4] = {'T','o','t','o'};


cout << c1 << endl;
cout << c2 << endl;


return 0;

}

最佳答案

当你流出一个字符数组时,它必须——按照惯例——以 null 终止,否则你有未定义的行为

更改 c2如下所示,它将按预期开始工作:

char c2[5] = {'T','o','t','o', '\0'};

c1的情况下,它假定您需要附加一个隐式 null 和大小 c1自动为它留出空间,所以如果你使用 sizeof std::extent<> 得到 c1 的大小你会看到它有 5 个字节。

Drew 的评论建议在调用函数时解释数组到指针的衰减,所以这里开始。当你写:

cout << c2;

编译器调用函数std::ostream& operator<<(std::ostream&, const char*) .数组 c2 衰减char* ,允许匹配和调用函数,但这样做会丢失有关文本长度的所有知识。函数实现希望您遵循在要流式传输的文本之后使用空终止符的约定。如果你想明确控制应该打印多少个字符,你可以使用例如std::cout.write(c2, 3) . std::string s 也更直观地工作 - 初学者应该更喜欢使用 std::string s 存储和操作文本。

关于c++ - cout 两次返回一串字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66249251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com