gpt4 book ai didi

c++ - 创建一个字符串 vector : C++

转载 作者:太空宇宙 更新时间:2023-11-04 15:22:07 25 4
gpt4 key购买 nike

我正在尝试创建一个 vector ,它应该输入 strings(包括空格) 直到用户输入 '!'

下面是我的代码:

#include <iostream>
#include <vector>
#include <string>
#include <iterator>

using namespace std;


int main()
{

char buffer[100];
string temp;
vector <string> vec;


while(1)//Shows Segmentation fault error while running,
//compiles succesfully
{
cout << "Enter String : ";
cin.get(buffer,100,'\n');//To ensure that whitespaces are also input
cout << "@@@@ " << buffer << endl ;//Shows correct input

cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
//Clearing cin stream for any residual characters
temp.assign(buffer);//Assigning string the input "phrase"
cout << "###" << temp << endl;//Shows correct output

if (temp == "!") //if input is '!' character do not push on the vector a
//come out of the loop
break;

vec.push_back(temp);//push on the vector
temp.assign(NULL); //flush temp string

}


vector <string>::iterator p = vec.begin();
//display thre vector
while( p != vec.end())
{
cout << *p << endl;
p++;
}

return 0;
}

它编译成功但在运行时抛出 Segmentation fault 错误。

不明白为什么?谁能指出来?

这也是一个更聪明的解决方案,感谢您指出我的代码有什么问题。

谢谢

最佳答案

这将是原因:

temp.assign(NULL);

作为std::string::assign()将尝试读取直到找到空终止符并且取消引用 NULL 指针是未定义的行为:在这种情况下是段错误。使用 temp.clear() 或在每次迭代时只创建一个新对象。

使用std::getline()它读取包含空格的行并避免必须对固定大小的数组进行硬编码(即 buffer[100]):

std::string line;
while (std::getline(std::cin, line) && line != "!")
{
vec.push_back(line);
}

关于c++ - 创建一个字符串 vector : C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16377664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com