我的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/

10-13 03:32