我要求用户在控制台上输入一个字符串。但我不知道字符串的长度。
如何定义一个结构以使输入符合可变长度?
int main(){
int i;
char s[10];
cout << "input string:";
cin >> s;
return 0;
}
如果输入字符串长度超过10,示例代码将导致堆损坏。
答案 0 :(得分:10)
请改用std::string。例如:
#include <string>
std::string s;
std::cout << "input string:";
std::cin >> s;
或者使用std :: getline获取一行直到结束字符
std::getline(std::cin, s);
答案 1 :(得分:3)
在c ++中,你应该使用std::string
而不是char [],尤其是对于可变长度的字符串。
答案 2 :(得分:2)
这是一个有用的通用示例,允许您读入包含空格的字符串:
#include <string>
#include <iostream>
int main()
{
std::string s;
std::cout << "Type a string\n";
std::getline(std::cin, s);
std::cout << "You just typed \"" << s << "\"\n";
}
答案 3 :(得分:1)
cplusplus.com说&gt;&gt;输入流中字符串的运算符使用空格作为分隔符。因此,如果你需要你的字符串能够包含空格,你必须使用std::getline(...)
(这与istream :: getline(...)!!!!不同)
基本上是这样的:
std::string inputString;
std::getline(cin, inputString);
我的回答受到this answer
的启发答案 4 :(得分:0)
#include <iostream>
#include <string>
using namespace std;
int main(){
int i;
string s;
cout << "input string:";
cin >> s;
return 0;
}
使用std :: string而不是char []。
如果您在输入后需要使用char [],可以参考以下问题:
例如,
string s1;
cin >> s1;
char *s2;
s2 = new char[s1.length() + 1]; // Including \0
strcpy(s2, s1.c_str());
delete []s2;
如果您不了解new和delete,可以使用malloc和free。
答案 5 :(得分:0)
基本上建议您始终使用std :: string来获取可变长度输入。仍然如果您需要将输入存储在数组中以将其传递给函数或其他东西。你可以这样做。虽然很蹩脚。
/* #include <string> */
std::string s;
std::cout<<"Enter the String";
std::getline(std::cin, s);
char *a=new char[s.size()+1];
a[s.size()]=0;
memcpy(a,s.c_str(),s.size());
std::cout<<a;
此致
<强> Genocide_Hoax 强>