我正在尝试在char数组中对2个值进行排序并将其读回。编译时没有错误/警告。但程序在启动时崩溃了?
#define s_size 9
struct _struct {
public:
void SetItemName(int i, char *c) {
strcpy(item[i], c);
}
const char *GetItemName(int i) const {
return item[i];
}
private:
char* item[s_size];
};
_struct mystruct;
void Getvalue()
{
printf(mystruct.GetItemName(0));
}
void Setvalue( )
{
mystruct.SetItemName(0,"hello");
mystruct.SetItemName(1,"world");
Getvalue();
}
答案 0 :(得分:3)
您应该使用modern C++ style,因此std::vector<std::string>
。
#include <cstddef>
#include <string>
#include <utility>
#include <vector>
struct {
public:
void SetItemName(std::size_t i, std::string s) {
if (i >= items.size()) {
items.resize(i + 1);
}
items[i] = std::move(s);
}
std::string const& GetItemName(std::size_t i) const {
return items[i];
}
private:
std::vector<std::string> items;
} mystruct;
这将为您进行内存管理,以及调整字符串向量并在有空位时插入空字符串。