1
int client::add_user(item & item_in)
{
    char temp[ASIZE];
    cout << "\n\nEnter the name of your item: ";
    cin.get(temp, 100, '\n');
    cin.ignore(100, '\n');
    get_upper(temp);
    item_in.name = temp;

    cout << "\n\nEnter in effect one: ";
    cin.get(temp, 100, '\n');
    cin.ignore(100, '\n');
    get_upper(temp);
    item_in.effect1 = temp;

    cout << "\n\nEnter in effect two: ";
    cin.get(temp, 100, '\n');
    cin.ignore(100, '\n');
    get_upper(temp);
    item_in.effect2 = temp;

    cout << "\n\nEnter in effect three: ";
    cin.get(temp, 100, '\n');
    cin.ignore(100, '\n');
    get_upper(temp);
    item_in.effect3 = temp;

    cout << "\n\nEnter 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”显示,然后是分段错误,没有“那个”。有任何想法吗?

4

1 回答 1

3

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

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

于 2012-05-25T07:42:48.623 回答