在c中打印字符串数组的第一个元素时出现分段错误



我正在扫描文本文件中的行,并将元素放入特定的数组中,sscanf运行良好,并将变量插入数组中,但打印字符串数组的第一个元素会导致分段故障(打印其他数组中的第一个元素和字符串数组中的其余元素)

这是我的代码:

char **shipTable = NULL;
char *notimportant;
double *dirTable;
double *numTable;
double *speedTable;
double *latTable;
double *lngTable;
void scanShips(){
   char fname[30];
   char line[150];
   char shipname[10];
   double lat;
   double lng;
   double speed;
   double dir;
   int numofShips;
   numofShips=1;
   FILE *myfile;

   printf("give file name containing ships /n");
   scanf("%s",fname);
   myfile = fopen(fname,"rt");
   fgets(line,80,myfile);
   sscanf(line, "%d %d %d %d %d %d", &day, &month, &year, &h, &min, &sec);
   while ( fgets( line,100,myfile) != 0 ) {
       sscanf(line, "%s %lf %lf %lf %lf", shipname, &lat, &lng, &dir, &speed);
       printf("%s",shipname);
       printf("n");
       shipTable = realloc( shipTable, numofShips*sizeof(char*) );
       latTable = realloc( latTable, numofShips*sizeof(double) );
       lngTable = realloc( lngTable, numofShips*sizeof(double) );
       dirTable = realloc( dirTable, numofShips*sizeof(double) );
       speedTable = realloc( speedTable, numofShips*sizeof(double) );
       shipTable[numofShips-1]=malloc((10)*sizeof(char));

       strcpy (shipTable[numofShips-1],shipname);
       dirTable[numofShips-1]=dir;
       speedTable[numofShips-1]=speed;
       latTable[numofShips-1]=lat;
       lngTable[numofShips-1]=lng;
       numofShips++;
   //printf("%d",numofShips);
    }
    fclose ( myfile);
//note:
printf("%s",shipTable[0]);//<---Segmentation fault
printf("%s",shipTable[1]);//<---Perfectly fine, as well as rest fo the array
printf("%f",dirTable[0]);//<---Perfectly fine, as well as rest of "double" arrays

示例文件:
2011年11月13日13 04 00
GW1927 52.408-4.117 1.000 0.000
GS452 51.750-4.300 5.000 10.000
EI597 52.100-6.000 90.000 12.000
EI600 52.000-5.900 10.000 15.000
EI601 54.000-5.900 10.000 15.000

船名长度永远不会超过9个字符。

您的程序不完整。一旦我完成了它(通过添加必要的#includes,定义daymonth等),它就会编译并正常工作。

结论:你并没有告诉我们整个故事,错误就在你没有显示的代码中。

相关内容

  • 没有找到相关文章

最新更新