gpt4 book ai didi

c++ - 空终止没有出现在 strcpy-ing 的数组中

转载 作者:行者123 更新时间:2023-11-30 03:31:41 24 4
gpt4 key购买 nike

当我使用 c_str()std::string 转换为 C 风格 字符串时,我没有看到最后一个被 c_str() 应该添加到这个程序中的空终止符覆盖的字符:

#include<iostream>
#include<string>
#include<cstring>

using namespace std;

int main()
{
string s = "helloworld";
char c[10];
strcpy(c, s.c_str());
cout << c << endl;
return 0;
}

我想问的是为什么 d 被打印(添加到 c),因为我期望 null-termination 在那里。我在这里缺少什么?

最佳答案

您的代码具有未定义的行为,因为您将字符串复制到其中的数组 c 没有为空终止符分配足够的空间。

您复制的字符数是 10,因此您需要一个包含 11 个字符的数组来容纳空终止符。

为避免像静态分配数组那样的溢出问题,请改用动态分配:

char *c = new char[s.size()+1];
strcpy(c, s.c_str());
cout << c <<endl;
delete[] c;

关于c++ - 空终止没有出现在 strcpy-ing 的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44025949/

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