【发布时间】:2013-09-17 08:47:33
【问题描述】:
我正在使用 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)/*insert while condition here*/
代码执行时发生崩溃。
【问题讨论】:
-
你试过调试吗?它在循环的第一次迭代中崩溃了吗?你如何初始化
i? -
如果你想学习 C++ 读取格式化输入的方法,你可能想看看cppreference on istream operator >>
标签: c++ input buffer-overflow scanf