C++ cin.ignore 导致 seg 错误
C++ cin.ignore causing a seg fault?
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
。它按您的预期处理资源管理和操作,例如分配工作。
相关文章:
- C++ - 将元素按升序插入数组的 SEG 错误
- 为什么我在使用 istream 迭代器时会出现 seg 错误?
- 字符串上的合并排序上的 Seg 错误
- 导致 Seg 错误的 SingleLinkedList 的析构函数
- g++ 9.2.1 (Linux) 会导致 seg 错误,但 Windows 上的代码块不会
- 函数抛出seg错误,我不知道为什么
- Microsoft Visual Studio 2019交叉编译CMake库 - 有效,但存在SEG错误
- 由于相同的文件名/类名存在于不同的SO中而导致的SEG错误
- 尝试访问 3D 矢量中的元素时出现 Seg 错误
- 垫子对象数组太大会导致 Seg 错误
- 为什么push_back成矢量<矢量<int>>导致 seg 错误?
- 在向量中存储字符串存在 SEG 错误
- 更改本地类名时出现 seg 错误
- 使用 ->GetString( " ") 时出现 Seg 错误,它位于单独的类中
- 将字符数组转换为 std::string 以传递到 std::bitset seg 错误
- 字符和 int 连接何时会导致 seg 错误?
- 静态数组溢出堆栈(seg 错误 11)仅在类定义内部时,否则不会..?
- .EOF 在读取文件时导致 Seg 错误:FIXXED
- 在 qt5 中使用 QSharedPointer 时出现 Seg 错误
- 为什么我的 if 语句会出现 seg 错误?