c - 无法通过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
解决方案
strtok
不分配任何内存,它只是返回指向您使用的内存的指针。在这里,您有一个单一buffer
的数据,您可以在其中读取数据然后对其进行标记。这意味着每次返回的第一项指针都buffer
与每次读取新数据时都会覆盖旧数据相同。
您需要为要存储的数据分配内存(可能使用strdup
),然后在不需要时管理释放它。
推荐阅读
- python - Splitting string by more empty lines
- makefile - Makefile依赖而不声明规则?
- r - 如何绘制按变量级别拆分的条形图,同时通过多元回归控制其他变量?
- javascript - will react native ios simulator throw an error if https request is not secure? (certificate is invalid)
- r - R中的后缀前缀和前缀后缀
- reactjs - React Hooks - Infinite loops when setting a state within a map
- r - 如何将 mutate 和 case_when 应用于 R 中 df 中的所有列?
- python - 我的分类报告总是无法显示准确度参数。我该如何解决?
- python - 摆脱散景工具栏中的悬停图标
- android - Android SQLITE:insertWithOnConflict() 重复插入