【发布时间】:2020-11-28 09:21:37
【问题描述】:
static int get_token(char *line, char fields[2][30], char *delim){
char *token = strtok(line , delim);
int flag = 0;
while (token != NULL) {
//printf("%s\n", token);
token = strtok(NULL, delim);
if (flag == 0)
strcpy(fields[flag], token);
else if(flag == 1)
strcpy(fields[flag], token);
}
return flag;
}
static void sort_data(){
// printf("reading the file ...........");
FILE *fileOpen = fopen( filename , "r");
char line[LINE_SIZE];
char fields [2][30];
while(fgets(line, LINE_SIZE, fileOpen) != NULL){
int no_of_token = get_token(line, fields, ",");
printf("%d\n",no_of_token);
if(no_of_token != 2){
//printf(" number of fields is not 2 for entry %d",j);
continue;
}
printf("%s \n %s",fields[0],fields[1]);
}
}
在上面的程序中,我要做的是打开一个 (.csv) 文件,逐行读取它,然后将这些行传递给 get_token 函数,以便生成令牌,我只想要那些有 2 个字段的行 我还想获取这两个标记的值,以便我可以将它传递给 add_record 函数(我还没有编写)并创建一个动态结构数组,以便我可以对其进行排序并将其存储在其他文件中。 但是当我运行它时我没有得到字段的值,而是我的输出显示核心转储。 所以请帮助我解决这个问题以及结构的动态分配,因为我是 c 编程新手。如果我的代码伤害了你的眼睛,也很抱歉
【问题讨论】:
-
首先,您的 get_token 函数始终返回 0。如果您想返回已解析的令牌数,则需要在令牌化循环内增加标志变量。在没有测试数据的情况下很难知道程序为什么会崩溃,但很可能是因为“标志”从不增加,所以字符串永远不会复制到字段 [1] 中,并且您尝试 printf 未初始化的内存。一个建议是删除最终打印以确保是导致崩溃的代码,和/或将 printf 分成单独的部分,以查看它是否打印字段 [0] 但打印字段 [1] 崩溃。
标签: arrays c file struct dynamic-arrays