C 使用strtok()分解字符串并将其放入数组

C 使用strtok()分解字符串并将其放入数组,c,arrays,csv,C,Arrays,Csv,我正在编写一个基本程序,它接受一个CSV文件,打印第一个字段,并对其他字段进行数值计算 我想把所有的数值场放到一个数组中,但每次我这样做,试图访问数组中的一个随机元素,它就会打印出整个数组 我的CSV文件是: Exp1,10,12,13 Exp2,15,16,19 我正在尝试访问第二个字段,以便打印 Exp1 12 Exp2 16 但是相反,我得到了 Exp1 101213 Exp2 151619 如果有人能提供一些建议。这是我的代码: #define DELIM "," int mai

我正在编写一个基本程序,它接受一个CSV文件,打印第一个字段,并对其他字段进行数值计算

我想把所有的数值场放到一个数组中,但每次我这样做,试图访问数组中的一个随机元素,它就会打印出整个数组

我的CSV文件是:

Exp1,10,12,13
Exp2,15,16,19
我正在尝试访问第二个字段,以便打印

Exp1 12
Exp2 16
但是相反,我得到了

Exp1 101213
Exp2 151619
如果有人能提供一些建议。这是我的代码:

#define DELIM ","

int main(int argc, char *argv[])
{
     if(argc == 2) {
         FILE *txt_file;
         txt_file = fopen(argv[1], "rt");

         if(!txt_file) {
             printf("File does not exist.\n");
             return 1;
         }

         char tmp[4096];
         char data[4096];
         char expName[100];
         char *tok;
         int i;

         while(1){
             if(!fgets(tmp, sizeof(tmp), txt_file)) break;

             //prints the experiment name
             tok = strtok(tmp, DELIM);
             strncpy(expName, tok, sizeof(expName));
             printf("\n%s ", expName);

             while(tok != NULL) {
                 tok = strtok(NULL, DELIM);

                //puts data fields into an array
                for(i=0; i < sizeof(data); i++) {
                     if(tok != NULL) {
                          data[i] = atoi(tok);
                     }
                }
                printf("%d", data[1]);
             }
        }
 fclose(txt_file);
 return 0;
 }
#定义DELIM“
int main(int argc,char*argv[])
{
如果(argc==2){
文件*txt_文件;
txt_file=fopen(argv[1],“rt”);
如果(!txt_文件){
printf(“文件不存在。\n”);
返回1;
}
char-tmp[4096];
字符数据[4096];
char expName[100];
char*tok;
int i;
而(1){
如果(!fgets(tmp,sizeof(tmp),txt_文件))中断;
//打印实验名称
tok=strtok(tmp,DELIM);
strncpy(expName、tok、sizeof(expName));
printf(“\n%s”,expName);
while(tok!=NULL){
tok=strtok(空,DELIM);
//将数据字段放入数组中
对于(i=0;i
要修复的示例

 char tmp[4096];
 int data[2048];
 char expName[100];
 char *tok;
 int i=0;

 while(fgets(tmp, sizeof(tmp), txt_file)){
     tok = strtok(tmp, DELIM);
     strncpy(expName, tok, sizeof(expName));
     printf("\n%s ", expName);

     while((tok = strtok(NULL, DELIM))!=NULL){
         data[i++] = atoi(tok);
    }
    printf("%d", data[1]);
    i = 0;
}

修改后的代码段:

     int data[20]; // change 20 to a reasonable value
...
     while (1)
     {   if (!fgets(tmp, sizeof(tmp), txt_file))
             break;

         //prints the experiment name
         tok = strtok(tmp, DELIM);
         strncpy(expName, tok, sizeof(expName));
         printf("\n%s ", expName);

         i = 0;
         tok = strtok(NULL, DELIM);
         while (tok != NULL)
         {  //puts data fields into an array
            data[i++] = atoi(tok);
            if (i == 20)
                break;
            tok = strtok(NULL, DELIM);
         }
         if (i > 1)
            printf("%d", data[1]);
     }