知道fscanf(fp,“%s”,strr1)中参数的大小

时间:2019-06-10 04:57:21

标签: c++

char str1[10];
fscanf(fp , "%s", str1);

在分配给%s之前,我想知道str1的大小,以避免在输入数据庞大的情况下崩溃。

2 个答案:

答案 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 ++中,应使用在这方面安全的流和字符串。