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

Know size of argument in fscanf(fp , "%s" , strr1)

本文关键字:fp strr1 fscanf 参数 知道      更新时间:2023-10-16
char str1[10];
fscanf(fp , "%s", str1);

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

由于这是C++,因此您不必依赖fscanf。我们可以通过使用std::istream来完全避免缓冲区溢出:

std::string readWord(std::istream& input) {
    std::string word;
    if(input >> word) {
        return word; 
    } else { 
        // Handle error
    }
}
这将自动读取字符,

直到遇到第一个空格字符,并且它将根据需要自动分配内存。

您可以指定要读取的最大字符数:

fscanf(fp, "%9s", str1);

这不会将超过 10 个字符写入str1包括 null 终止符。

但是在C++你应该使用在这方面安全的流和字符串。