首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用strsep拆分解析CSV文件

使用strsep拆分解析CSV文件
EN

Stack Overflow用户
提问于 2016-09-07 15:51:22
回答 1查看 1.1K关注 0票数 1

当我试图用strsep()解析逗号分隔值文件时,我得到了一些不想要的输出。它似乎是工作的文件的一半,与一个数字只有一个值(即。0-9),但是一旦添加了多个值,例如512,

它将打印512 12 2 512 12,依此类推。我不确定这是不是因为我循环的特定风格?不是很确定。

代码语言:javascript
复制
int main() {

        char line[1024];

        FILE *fp;

        int data[10][10];

        int i = 0;
        int j = 0;

        fp = fopen("file.csv", "r");

        while(fgets(line, 1024, fp)) {

                char* tmp = strdup(line);
                char* token;
                char* idx;

                while((token = strsep(&tmp, ","))) {

                        for (idx=token; *idx; idx++) {
                                data[i][j] = atoi(idx);
                                j++;
                        }
                }
                i++;
                j=0;

                free(tmp);

        }


         for(i = 0; i < 10; i++) {

                for(j = 0; j < 10; j++) {
                printf("%d ", data[i][j]);
                }
                printf("\n");
        }

        fclose(fp);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 15:56:57

这是因为您通过循环将strsep()返回的标记中的每个字符都用作start来创建元素

代码语言:javascript
复制
for (idx=token; *idx; idx++) {
        data[i][j] = atoi(idx);
        j++;
}

停止这样做,只从一个令牌创建一个元素来更正:

代码语言:javascript
复制
while((token = strsep(&tmp, ","))) {

        data[i][j] = atoi(token);
        j++;
}

此外,free(tmp);不会执行任何操作,因为tmp将被strsep()设置为NULL。要释放通过strdup()分配的缓冲区,请将指针放在另一个变量中并将其用于释放。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39364170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档