将指针从strtok()分配到包含在结构中的ptr我有一个这些结构的二维数组,我想用来存储我试图从csv文件解析的数据。

typedef struct Entry
{
    char *str;
} Entry;

我从fgets()获取输出,并通过我自己的函数TokenizeLine()发送,以便将其拆分并分配到数组中的适当位置然而,我的2d数组(etable)的每个条目中的每个指针最终都持有相同的值。
下面的代码有什么问题?
fgets(currentLineStr, 8192, fileIn);

while (currentLineStr[0] == '#')
      fgets(currentLineStr, 8192, fileIn);

TokenizeLine(currentLineStr, eTable, yIndex, x, y);
yIndex++;

while(fgets(currentLineStr, 8192, fileIn) != NULL)
{
      TokenizeLine(currentLineStr, eTable, yIndex, x, y);
      yIndex++;
}



void TokenizeLine(int x; int y; char currentLineStr[], Entry eTable[x][y], int yIndex, int x, int y)
{
      char *tokPtr;
      int xIndex = 0;

      tokPtr = strtok(currentLineStr, "|");

      while(tokPtr != NULL)
      {
            eTable[xIndex][yIndex].str = tokPtr;
            tokPtr = strtok(NULL, "|");
            xIndex++;
      }
 }

最佳答案

在您的代码中,所有的str实际上都作为tokPtr的占位符工作它们都只指向tokPtr现在,在完成while()循环之后,tokPtr保存的最新值也将由所有strs提交。
为了避免,你需要
为每个str分配内存,可以使用malloc()
使用strcpy()tokPtr的当前值复制到相应的str中。

关于c - 将strtok的指针分配给结构的2d数组中的指针,所有条目都应该是唯一的,但要打印为相同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31299474/

10-11 22:29
查看更多