首页 > 解决方案 > 无法通过c中的strtok函数获取数组中的字符串

问题描述

我将从 csv 文件中获取数据,但是当我使用 strtok 函数在此处将拆分的字符串放入 array 时,通过逗号分隔来拆分数据。它无法显示实际输出

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

int i = 0;
int j = 0;
char *name[20];



int main() {
    FILE *fp = fopen("meetingData.csv", "r");
    if (!fp)
        printf("Can't open file\n");

    else {
        int count;
        char buffer[1024];

        while (fgets(buffer,1024, fp)) {
            char *value = strtok(buffer, ", ");
            printf("%s\n",value);
            int x = 0;
            while (value != NULL) {
                if (x == 0) {
                    name[i] = value;
                    printf("name[%d]is  %s", i, name[i]);
                    i = i + 1;
                    x++;
                } else if (x == 1) {
                    printf("\n");
                    x++;
                } else {
                    //time[j] = j+'0';
                    //  printf("%s",value);
                    //printf("%d\n",x);
                    x++;
                    j++;

                }
                value = strtok(NULL, ",");
               // printf("%d\n", x);
            }


        }
        for (int k = 0; k < count; k++) {
            printf("%s\n", name[k]);
          //  printf("%s\n", time[k]);
      }
        fclose(fp);
        }

    return 0;
}

在这里你可以看到我的输出他们用数组显示数据

但是当我在循环中打印时,最后一个元素将打印整个数组索引

/home/karan/untitled14/cmake-build-debug/untitled14
Ashley_Parry
name[0]is  Ashley_Parry
Namal_Perera
name[1]is  Namal_Perera
Namal_Perera
name[2]is  Namal_Perera
Prabath_Silva
name[3]is  Prabath_Silva
Bethany_William
name[4]is  Bethany_William
Ashley_Parry
name[5]is  Ashley_Parry
Namal_Perera
name[6]is  Namal_Perera
Aaliya_Bruce
name[7]is  Aaliya_Bruce
Aaliya_Bruce
name[8]is  Aaliya_Bruce
Prabath_Silva
name[9]is  Prabath_Silva
Waruni_Fernando
name[10]is  Waruni_Fernando
Raul_Oliver
name[11]is  Raul_Oliver
Aaliya_Bruce
name[12]is  Aaliya_Bruce
Dr_Rajitha_Karunarathna
name[13]is  Dr_Rajitha_Karunarathna
Raul_Oliver
name[14]is  Raul_Oliver
Jasper_Jensen
name[15]is  Jasper_Jensen
Jasper_Jensen
name[16]is  Jasper_Jensen
Namal_Perera
name[17]is  Namal_Perera
Chamira_Perera
name[18]is  Chamira_Perera
Wasana_Tennekoon
name[19]is  Wasana_Tennekoon
Dr_Kamal_Jayasooriya
name[20]is  Dr_Kamal_Jayasooriya
Raul_Oliver
name[21]is  Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver
Raul_Oliver

标签: cstrtok

解决方案


strtok不分配任何内存,它只是返回指向您使用的内存的指针。在这里,您有一个单一buffer的数据,您可以在其中读取数据然后对其进行标记。这意味着每次返回的第一项指针都buffer与每次读取新数据时都会覆盖旧数据相同。

您需要为要存储的数据分配内存(可能使用strdup),然后在不需要时管理释放它。


推荐阅读