-1

我正在尝试对 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();
}
4

1 回答 1

3

您应该使用现代 C++ 风格,因此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;

这将为您进行内存管理,以及调整字符串向量的大小并在有任何间隙时插入空字符串。

于 2013-03-29T23:02:59.517 回答