我的strcat在下面的代码中有分段错误:
csv* lines_into_csv(int m,char* array[LINES_MAX][COLUMNS]){
char *first_string, *final_string;
first_string = (char*)calloc(400,sizeof(char));
final_string = (char*)calloc(400,sizeof(char));
csv *earthquake = malloc(sizeof(csv)*LINES_MAX);
int n, j;
for(j = 0; j < m; j++){
for(n = 0; n < COLUMNS; n++ ){
if (array[j][n] != NULL) {
if(n < 4){
strcat(first_string, array[j][n]);
}
else if(n == 4){
earthquake[j].mag = atof(array[j][n]);
}
else {
strcat(final_string, array[j][n]);
}
}
}
earthquake[j].start_of_line = (char*)calloc(200,sizeof(char));
earthquake[j].end_of_line = (char*)calloc(200,sizeof(char));
earthquake[j].start_of_line = strdup(first_string);
earthquake[j].end_of_line = strdup(final_string);
free(first_string);free(final_string);
}
return earthquake;
}
csv类型结构由两个char*和一个float组成,这是我对文件进行排序时使用的数字。
最佳答案
这里有密码
csv *earthquake = malloc(sizeof(csv*)*LINES_MAX);
您被分配了一个指向csv结构的指针数组,但您似乎假定可以在此处访问struct csv的对象:
earthquake->start_of_line = (char*)calloc(200,sizeof(char));
earthquake->end_of_line = (char*)calloc(200,sizeof(char));
你可能是说
csv *earthquake = malloc(sizeof(csv)*LINES_MAX);
编辑:
检查in参数,确保其中的长度不超过您分配的长度。还要确保in字符串正确地以0结尾。
关于c - 使用strcat()进行段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28931149/