我用C中的指针挣扎。我需要将每行的第一个元素放入数组中。

重要部分:

char shipname[10];
char **shipTable = NULL;


 while ( fgets( line,100,myfile) != NULL ) {
     sscanf(line, "%s %lf %lf %lf %lf", shipname, &lat, &lng, &dir, &speed);
     shipTable = realloc( shipTable, numofShips*sizeof(char*) );
     shipTable[numofShips-1]=malloc((10)*sizeof(char));
     (shipTable)[numofShips-1] = shipname;
     //char *shipname=malloc((10)*sizeof(char));
     numofShips++;
     }


当我打印出shipTable的每个元素都相同时,我尝试了&和*的每种组合。

最佳答案

您正在为shiptTable的每个元素分配一个指针值,即指向shipname的第一个元素的指针,该元素在内存中的位置永远不变。您实际要做的是每次都复制字符串-例如strcpy(shiptable[numofShips-1], shipname)

甚至更好的是,只需在sscanf之前分配内存,并使用shiptable [numofShips-1]作为sscanf中的参数,而不是shipname。

10-01 23:45