如何获得控制台的大小输入字符串或缓冲区中有效字符的大小?
char buffer[100];
cin >> buffer;
我希望将'\ 0'放在输入结束处。
答案 0 :(得分:6)
首选使用std::string
,而不是char*
或char[]
。这让事情变得简单! char buffer[100]
的问题是,如果输入字符串的大小超过100,那么您的cin >> buffer
将调用未定义的行为,因为它会尝试编写以外的内容数组。如果您使用std::string
。
std::string input;
cin >> input; //this can read string of any unknown size!
cout << "length of input string : " << input.size()<< endl;
您也可以使用input.length()
代替input.size()
。它们返回相同的值。
答案 1 :(得分:2)
你不需要(很可能,不可能)。相反,请使用std::string
而不是char
缓冲区。
答案 2 :(得分:2)
这个问题没有实际意义。当用户键入超过100个字符时,您有缓冲区溢出。你可能会崩溃。如果没有,你最多会遇到安全问题。你不应该这样做。一次读取一个字符的输入,或使用更安全的字符串库。如果你的平台支持gets_s,那么我会想到它。
但是在回答你的问题时,这可能就是你所需要的:
char buffer[100] = {}; // zero-init the entire array
int length = 0;
cin >> buffer;
length = strlen(buffer); // length is the length of the string