因为我发布这个问题时代码中有错误,所以这不是一个好问题。我已将其删除并替换为指向正确解决方案的链接。
user898058
问问题
726 次
2 回答
1
这里最简单的解决方法是对你的“cin.getline()”调用设置一个限制,这样它就不会溢出你的缓冲区,或者切换到使用字符串类或类似的东西:
#include <iostream>
#include <errno.h>
int main() {
std::string buffer;
double value;
char* garbage = NULL;
while (true) {
std::cin >> buffer;
std::cout << "Read in: " << buffer << std::endl;
if (std::cin.good())
{
value = strtod(buffer.c_str(), &garbage);
if (errno == ERANGE)
{
std::cout << "A value outside the range of representable values was returned." << std::endl;
errno = 0;
}
else
{
std::cout << value << std::endl << garbage << std::endl;
if (*garbage == '\0')
std::cout << "good value" << std::endl;
else
std::cout << "bad value" << std::endl;
}
}
}
return 0;
}
于 2011-10-09T03:13:07.553 回答
1
cin.getline(缓冲区, '\n'); <-- 错误,需要缓冲区大小。
cin.getline(buffer, 10000, '\n');
于 2011-10-09T10:13:38.943 回答