c中的核心转储和动态内存分配
core dumped and dynamic memory allocation in c
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 个字段的行
我还想获取这 2 个标记的值,以便我可以将它传递给 add_record 函数(我还没有编写)并创建一个动态结构数组,以便我可以对其进行排序并将其存储在其他文件中。
但是当我 运行 它显示核心转储时,我没有得到字段的值而是我的输出。
所以请帮助我解决这个问题以及结构的动态分配,因为我是 c.And 中的编程新手,如果我的代码伤害了你的眼睛,也很抱歉
您的代码中有一些错误。我已经修好了。只需比较两个代码文件,您就能了解您的代码出了什么问题。大多数情况下,您放错了行,无法编写正确的算法等...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE_SIZE 1024
int get_token(char *line, char fields[][30], char *delim) {
int token_cnt = 0;
char *token = strtok(line , delim);
while(token != NULL) {
// check if there is more than two tokens
if(token_cnt >= 2) {
return 3;
}
//printf("%s\n", token);
strcpy(fields[token_cnt++], token);
// update token
token = strtok(NULL, delim);
}
return token_cnt;
}
void sort_data() {
static char line[LINE_SIZE];
static char fields [2][30];
char *input = "input.csv";
// printf("reading the file ...........");
FILE *fp = fopen(input, "r");
if(fp == NULL) {
printf("error: can't open file\n");
exit(1);
}
while(fgets(line, LINE_SIZE, fp) != NULL) {
int no_of_token = get_token(line, fields, ",");
printf("no_of_token: %d\n", no_of_token);
if(no_of_token != 2) {
// printf(" number of fields is not 2 for entry %d",j);
printf("no_of_token is not 2...:(\n\n");
continue;
}
printf("first-elem: %s \nsecond-elem:%s\n",fields[0],fields[1]);
}
fclose(fp);
}
int main() {
sort_data();
return 0;
}
input.csv:
A,B
C,D
X,Y
P,Q,R
U,V
输出:
no_of_token: 2
first-elem: A
second-elem:B
no_of_token: 2
first-elem: C
second-elem:D
no_of_token: 2
first-elem: X
second-elem:Y
no_of_token: 3
no_of_token is not 2...:(
no_of_token: 2
first-elem: U
second-elem:V
注意:如果元素少于或多于 2 个,您也可能会抛出错误...由您选择
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 个字段的行 我还想获取这 2 个标记的值,以便我可以将它传递给 add_record 函数(我还没有编写)并创建一个动态结构数组,以便我可以对其进行排序并将其存储在其他文件中。 但是当我 运行 它显示核心转储时,我没有得到字段的值而是我的输出。 所以请帮助我解决这个问题以及结构的动态分配,因为我是 c.And 中的编程新手,如果我的代码伤害了你的眼睛,也很抱歉
您的代码中有一些错误。我已经修好了。只需比较两个代码文件,您就能了解您的代码出了什么问题。大多数情况下,您放错了行,无法编写正确的算法等...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE_SIZE 1024
int get_token(char *line, char fields[][30], char *delim) {
int token_cnt = 0;
char *token = strtok(line , delim);
while(token != NULL) {
// check if there is more than two tokens
if(token_cnt >= 2) {
return 3;
}
//printf("%s\n", token);
strcpy(fields[token_cnt++], token);
// update token
token = strtok(NULL, delim);
}
return token_cnt;
}
void sort_data() {
static char line[LINE_SIZE];
static char fields [2][30];
char *input = "input.csv";
// printf("reading the file ...........");
FILE *fp = fopen(input, "r");
if(fp == NULL) {
printf("error: can't open file\n");
exit(1);
}
while(fgets(line, LINE_SIZE, fp) != NULL) {
int no_of_token = get_token(line, fields, ",");
printf("no_of_token: %d\n", no_of_token);
if(no_of_token != 2) {
// printf(" number of fields is not 2 for entry %d",j);
printf("no_of_token is not 2...:(\n\n");
continue;
}
printf("first-elem: %s \nsecond-elem:%s\n",fields[0],fields[1]);
}
fclose(fp);
}
int main() {
sort_data();
return 0;
}
input.csv:
A,B
C,D
X,Y
P,Q,R
U,V
输出:
no_of_token: 2
first-elem: A
second-elem:B
no_of_token: 2
first-elem: C
second-elem:D
no_of_token: 2
first-elem: X
second-elem:Y
no_of_token: 3
no_of_token is not 2...:(
no_of_token: 2
first-elem: U
second-elem:V
注意:如果元素少于或多于 2 个,您也可能会抛出错误...由您选择