while (fgets(buff, sizeof (char*)*100, file)) {
if (line == 0) {
fgets(buff, sizeof (char*)*100, file);
line++;
}
int i = 0;
char *p = strtok(buff, ",");
char *array[10];
while (p != NULL) {
array[i++] = p;
p = strtok(NULL, ",");
}
if (!strcmp(array[1], "03/04/2020")) {
*inf += atof(array[i - 2]);
*dead += atof(array[i - 1]);
*rec += atof(array[i]);
}
}
我正在尝试分割具有以下格式的行:
3245,03/04/2020,Jiangxi,Mainland China,2020-03-04T01:33:07,935.0,1.0,884.0
我尝试将strtok
与","
分隔符一起使用,但我一直得到此`
RUN FAILED(退出值-1,073,741,819,总时间:1秒
如果我的代码不清楚,请不要犹豫,向我询问
文件中可能有空白行。它没有任何令牌,因此i
将在循环后为0
。 array[i]
将未初始化,并且array[i-1]
和array[i-2]
将在数组之外,因此访问它们会导致未定义的行为。
检查您是否已获得足够的令牌,否则请跳过该行。
此外,由于在分配令牌后增加了i
,因此array[i]
在分配的元素之后。您应该使用i-3
,i-2
和i-1
来获取最后3个令牌。
// skip header line
fgets(buff, sizeof (char*)*100, file);
while (fgets(buff, sizeof (char*)*100, file)) {
int i = 0;
char *p = strtok(buff, ",");
char *array[10];
while (p != NULL) {
array[i++] = p;
p = strtok(NULL, ",");
}
if (i <= 3) { // skip lines that don't have enough tokens
continue;
}
if (!strcmp(array[1], "03/04/2020")) {
*inf += atof(array[i - 3]);
*dead += atof(array[i - 2]);
*rec += atof(array[i-1]);
}
}