0

我正在使用 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*/

代码执行时我会崩溃。

4

3 回答 3

3

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

于 2013-09-17T09:05:20.873 回答
2

读取字符时,您无法使用 fprintf 执行此操作。

我会首先阅读整行,例如,使用getline(),定位分隔符(或标记行),然后解析各个元素。

顺便说一句,您崩溃的原因也可能是inArray.

于 2013-09-17T09:05:25.317 回答
1

OP 可能在fscanf().

虽然 OP 没有发布关于inArray[i]让我们假设它的详细信息

struct {
  int ID;
  char label[20];
  char brand[10];
} inArray[100];

格式应该是

"%d,%19[^,],%9[^,]"

19 的宽度需要比目标的大小小 1,从而为 '\0' 留出一个位置。

于 2013-09-17T16:20:28.990 回答