gpt4 book ai didi

c++ - 为什么从 char 数组创建的 ostream std::string 上的段错误

转载 作者:行者123 更新时间:2023-11-30 01:04:46 28 4
gpt4 key购买 nike

这是我无法理解的:

#include <iostream>
#include <fstream>
typedef struct point{
char name[10];
int y;
} point_t;


std::string print(const char* str, size_t size) {
return std::string(str, size);
}

std::ostream& operator << (std::ostream &o,const point_t &a){
o << print(a.name, sizeof(a.name)) << ", " << a.y;
}


int main(){
point_t p = {
{'0','1','2','3','4','5','6','7','8','9'},
4
};

std::cout << "we have" << p << std::endl;
return 0;
}

有段错误,valgrinds 显示在

std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&) (in /usr/lib64/libstdc++.so.6.0.13)

我无法理解,因为我可以逐个字符地打印字符串并且不会发生段错误(例如 << a.name[0] << a.name[1] << ... << a .名称[9])

感谢任何帮助。

最佳答案

您的代码无法使用我的编译器 (VS2017) 进行编译。

我把它固定为:

#include <iostream>
#include <string>

typedef struct point {
char name[10];
int y;
} point_t;


std::string print(const char* str, size_t size) {
return std::string(str, size);
}

std::ostream& operator << (std::ostream &o, const point_t &a) {
o << print(a.name, sizeof(a.name)) << ", " << a.y;

return o;
}


int main() {
point_t p = {
{ '0','1','2','3','4','5','6','7','8','9' },
4
};

std::cout << "we have" << p << std::endl;
return 0;
}

请注意您的运算符的 return 语句和 string 的 include。

我对固定版本没有任何问题。如果您的编译器确实编译了您的版本,我建议您调高警告级别或获得一个通知您错误的编译器。

关于c++ - 为什么从 char 数组创建的 ostream std::string 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49410873/

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