-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 に答える