我是C ++的新手。我一直在看很多教程,但我还是很新的,只是在试图熟悉它。我正在测试比较字符串长度,但我遇到了一些问题。这是代码。
*编辑:&#c;'中的[10]修复时仍然给出错误。 错误是线程1:信号Sigabrt - 如果我更改>到<然后它起作用......但它不是我想要的。
#include <iostream>
using namespace std;
int main(){
char name[10];
cout<<"What is your name? ";
cin>> name;
if(strlen(name)> 11){
cout<<"Sorry we only handle names less than 10 letters";
}
return 0;
}
感谢。
答案 0 :(得分:1)
第cin>> name[10];
行不您的期望。
由于name[10]
是char
,您要求从cin
获取一个字符并将其放入name[10]
,超出数组末尾的一个位置(最后一个有效位置是name[9}
)!
你想要的可能是:
cin.width(10);
cin >> name;
要求从cin
获取最多9个字符,并将它们放入名称后跟一个终止空值。
编辑:
您的上一次修改修复了[10]
错误,但您仍然遇到问题。如果允许用户在大小为10的缓冲区中输入10个以上的字符,则会有未定义的行为,因为您将覆盖可能包含其他变量的内存。
唯一简单的方法是在输入char数组之前使用width
方法限制输入。
但真正的C++
方式是使用std::string
,其中大小和分配由string
类本身管理。
编辑2:
这是一个简单的例子,仍然使用char数组,并通过允许一个更多并且不使用测试来安全地保证输入值小于10个字符:
#include <iostream>
using namespace std;
int main(){
char name[11];
cout<<"What is your name? ";
cin.width(11);
cin >> name;
if(strlen(name)>=10){
cout<<"Sorry we only handle names less than 10 letters";
}
return 0;
}
使用std::string
#include <iostream>
#include <string>
using namespace std;
int main(){
string name;
cout<<"What is your name? ";
cin >> name;
if(name.length() >=10){
cout<<"Sorry we only handle names less than 10 letters";
}
return 0;
}
答案 1 :(得分:0)
我和Serge一致,就字符串而言。
我会更进一步,并举例说明如何使用std::string
来实现目标。我建议您查看它并将其用作字符数组的首选类型。
http://www.cplusplus.com/reference/string/string/
https://www.youtube.com/watch?v=7UtMU7D3g_s#t=121(我没有看完整件事,但可能是一个好的起点)
#include <iostream>
#include <string>
using namespace std;
int main(){
string name;
cin >> name;
if(name.length() > 11){
cout<<"Sorry we only handle names less than 10 letters";
}
cin.ignore();
cin.ignore();
return 0;
}