char str1[10];
fscanf(fp , "%s", str1);
在分配给%s
之前,我想知道str1
的大小,以避免在输入数据庞大的情况下崩溃。
答案 0 :(得分:3)
由于这是C ++,因此您不必依赖fscanf
。我们可以使用std::istream
来完全避免缓冲区溢出:
std::string readWord(std::istream& input) {
std::string word;
if(input >> word) {
return word;
} else {
// Handle error
}
}
这将自动读取字符,直到遇到第一个空格字符为止,并且它将根据需要自动分配内存。
答案 1 :(得分:2)
您可以指定要读取的最大字符数:
fscanf(fp, "%9s", str1);
这将不超过10个字符(包括空终止符)写入str1
。
但是在C ++中,应使用在这方面安全的流和字符串。