c++ - 使用 fscanf 时防止缓冲区溢出

标签 c++ input buffer-overflow scanf

我正在使用 fscanf 从 CSV 文件中读取一些值,我想确保读入这些值的数据不会太大而导致缓冲区溢出。

我的 csv 文件的格式为 int,string,string,我要读取的代码如下(稍后我会修复 while 条件):

while(fscanf(f, "%d,%[^,],%[^,]", &inArray[i].ID, inArray[i].label, inArray[i].brand)/*insert while condition here*/

当使用 scanf 时,我会像这样指定长度以防止溢出:scanf("%20f", example);

但如果我尝试与上面相同:while(fscanf(f, "%d,%20[^,],%10[^,]", &inArray[i].ID, inArray[ i].label, inArray[i].brand)/*在此处插入 while 条件*/

我在执行代码时崩溃了。

最佳答案

试试fscanf_s,这个函数有安全增强。 http://msdn.microsoft.com/en-us/library/6ybhk9kc(v=vs.90).aspx

关于c++ - 使用 fscanf 时防止缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18845234/

相关文章:

c++ - 数组函数的大小返回 int 而不是数组的大小

c++ - 通过将文本文件读入字符串/vector 来计算加权/未加权 GPA

c++ - 将 long double 转换为 CString

Java 交互不允许扫描用户输入

c - 缓冲区溢出c(获取函数)

C++ - 如何提高这个方法的执行速度

laravel - 使用 Laravel Request 在更新方法上传递空字段

html - 为什么我的输入在右侧有填充?

c - 为什么 C 没有像 strcpy() 这样使用的函数并自动检查缓冲区大小以防止缓冲区溢出错误?

c - 函数内和函数外的 char 有什么区别?