C++ cin.ignore 导致 seg 错误

C++ cin.ignore causing a seg fault?

本文关键字:seg 错误 导致 ignore cin C++      更新时间:2023-10-16
int client::add_user(item & item_in)
{
    char temp[ASIZE];
    cout << "nnEnter the name of your item: ";
    cin.get(temp, 100, 'n');
    cin.ignore(100, 'n');
    get_upper(temp);
    item_in.name = temp;
    cout << "nnEnter in effect one: ";
    cin.get(temp, 100, 'n');
    cin.ignore(100, 'n');
    get_upper(temp);
    item_in.effect1 = temp;
    cout << "nnEnter in effect two: ";
    cin.get(temp, 100, 'n');
    cin.ignore(100, 'n');
    get_upper(temp);
    item_in.effect2 = temp;
    cout << "nnEnter in effect three: ";
    cin.get(temp, 100, 'n');
    cin.ignore(100, 'n');
    get_upper(temp);
    item_in.effect3 = temp;
    cout << "nnEnter in effect four: ";
    cin.get(temp, 100, 'n');
    cout << "this";
    cin.ignore(100, 'n');
    cout << "that";
    get_upper(temp);
    item_in.effect4 = temp;

。了解到我确定这段代码有很多错误,我遇到的问题是前四个块运行良好,但是当我使用 g++ 编译此代码并运行它时,会显示"this",然后是分段错误,没有"that"。 有什么想法吗?

根据您的另一个问题,参数 item_in 看起来是一个具有多个char *字段的结构。有一个严重的问题,因为数组temp仅在此功能的持续时间内存在。您正在将临时数组的地址分配给 item_in 中的指针。当函数返回时,数组将超出范围,其内存不再是您的。

您可以通过为指针分配内存并复制数据来解决此问题,但最好的解决方案是使用C++标准库中的std::string。它按您的预期处理资源管理和操作,例如分配工作。