我正在尝试使用结构向量来满足我的需要,并且正在编写一些示例测试代码来理解行为。下面是我写的测试代码:
struct Student {
char *name;
int id;
char *section;
};
typedef struct Student student_t;
#include <iostream>
#include <vector>
#include "test.h"
using namespace std;
int main() {
vector<student_t> vst;
//vst.resize(2);
student_t st;
st.name = "student1";
st.id = 4503;
st.section = "secA";
vst.push_back(st);
vst.push_back({"student2", 4504, "secA"});
for(auto const& s:vst) {
std::cout<< " student: " << std::endl;
std::cout << "Name : " << s.name <<
std::cout << " Id : " << s.id <<
std::cout << " Section : " << s.section << std::endl;
}
return 0;
}
不指定向量大小的输出:
student:
Name : student10x6040c8 Id : 45030x6040c8 Section : secA
student:
Name : student20x6040c8 Id : 45040x6040c8 Section : secA
使用 resize(2) 时:
student:
Name :
我想不通问题!我的初始化有问题吗?
问题是代码:
std::cout << "Name : " << s.name <<
std::cout << " Id : " << s.id <<
如果您删除换行符,我们将获得:
std::cout << "Name : " << s.name << std::cout << " Id : " << s.id <<
犯错,为什么你想打印std::cout
的std::cout
?将尾随更改<<
为;
或:
std::cout << "Name : " << s.name
<< " Id : " << s.id
...
旁白:你在为自己积蓄各种麻烦,制造name
和section
成为char *
。它目前有效,因为您将它们设置为字符串文字(使用已弃用的转换)。一旦您尝试使它们可变,您就必须处理分配和取消分配它们。把所有的悲伤都留给自己,让他们std::string
快乐吧。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句