C 将逗号分隔的字符串转换为数组

标签 c arrays string csv split

我有一个用逗号分隔的字符串的存档我想将每一行放入 2 个数组:v[i].date 和 v[i].value。 但是,当我运行代码时,它会显示数组的随机值。 有什么我应该改变的吗?

Input
1761
02/20/18,11403.7
02/19/18,11225.3
02/18/18,10551.8
02/17/18,11112.7
02/16/18,10233.9

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>


typedef struct{
    char data[10];
    double valor;

}vetor;

int main(int argc,char *argv[]){
    FILE *csv;



        if((csv=fopen(argv[1], "r")) == NULL  )
        {
            printf("not found csv\n");
            exit(1);
        }


        long int a=0;

        char linha[256];

        char *token = NULL;

        if(fgets(linha, sizeof(linha), csv))
        {
            token = strtok(linha, "\n");
            a =(atoi(token));
        }


        printf("%d\n", a);

        rewind(csv);

        vetor *v;

        v=(vetor*)malloc(a*sizeof(vetor));

        char linha2[256];

        while (fgets(linha2, sizeof(linha2), csv) != 0)
        {
            fseek(csv, +1, SEEK_CUR);

            for(int i=0;i<a;i++)
            {   
                fscanf(csv, "%s[^,]", v[i].data);
                fscanf(csv, "%lf[^\n]", &v[i].valor);

            }
        }

        printf("%d\n", v[0].valor);


    fclose(csv);


    return 0;
}

最佳答案

您的 data 字段现在只包含一个 char。它至少需要为典型值留出空间,例如 02/19/18。

例如使用 char[10](如果您确定它永远不会超过 9 个字符)。

我认为编译器应该针对您的 fscanf 调用发出警告。

关于C 将逗号分隔的字符串转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49391363/

相关文章:

java - Android:数组循环返回空元素

javascript - 生成随机字符串并检查数据库以确保不重复

java - 如何将类返回到 onPostExecute?

javascript - 如何根据对象属性值更改表格行的颜色?

python - “在 <字符串>”中类型错误 : How to compare input string to a list(array)

java - 是否可以将所有相似的 Unicode 字符分组为合适的 ASCII 字符

c - 多线程 - C - 重复静态变量

在 C 中创建简单的位图(没有外部库)

c - SSL_CTX_set_verify() 回调和当前深度

c - 模数项目带来意想不到的结果