char *类型的值不能用于初始化“char”类型的实体

时间:2015-11-02 13:30:19

标签: c++

选项卡分隔example.txt文件:

1    MODEL1
2    MODEL2
3    MODEL3

我的主要人物:

int main()
{
    int number;
    char model[6];
    list myList;

    ifstream infile;
    infile.open("example.txt");

    //reading first line from file
    infile >> (int)number;
    infile >> model;
    myList.Insert({ number, model}, 1); // error here on model

    return 0;
}

myList类的伪:

struct data{
    int number;
    char model[6];
};

struct Node{
    data data;
    ...
};

Node = myNode[100]

void Insert(data x, int position)
{
    myNode[position].data = x;
}

我从example.txt文件中读取第二行字符时遇到问题。如何将MODEL1,MODEL2,MODEL3读入myList?

1 个答案:

答案 0 :(得分:1)

{number, model}正在尝试将成员变量model初始化为本地model的副本,但原始数组无法进行复制初始化。

您必须使用std::string

int main()
{
    int number;
    std::string model;
    list myList;

    ifstream infile;
    infile.open("example.txt");

    infile >> number;
    infile >> model;
    myList.Insert({number, model}, 1);
}

struct data
{
    int number;
    std::string model;
};

这也将修复@ user2079303和@JoachimPileborg发现的缓冲区溢出错误。

可以保留原始数组,并手动strncpy将本地model数组添加到成员model。但是,在C ++中不建议这样做。