c - 将 token 指针(来自 strtok)分配给结构的 2d VLA 的指针元素时出现段错误

标签 c arrays pointers variable-length-array

我正在尝试解析 csv 文件并将这些值存储在 2d VLA 中。 第一个代码块显示了我对函数 TokenizeLine 的两次调用,该函数非常简单地使用 strtok 来分隔行并将 token 分配给数组中适当的单元格。第二个 block 是有问题的函数。

  //Get first line of file then iterate through lines until
  //beginning comments are passed over
  fgets(currentLineStr, 8192, fileIn); 
  while (currentLineStr[0] == '#')
        fgets(currentLineStr, 8192, fileIn);

  //Start adding values to array. current line held by currentLineStr
  //is assigned first
  TokenizeLine(currentLineStr, eTable, yIndex, x, y);

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

在以下函数中,将 token 指针分配给 eTable 结构中包含的指针时,我遇到了段错误。

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, "|");
 *** eTable[xIndex][yIndex].str = tokPtr;*** (error happening here)

  while(tokPtr != NULL)
  {
        tokPtr = strtok(NULL, "|");
        eTable[xIndex][yIndex].str = tokPtr;
        //printf("%s\n", eTable[xIndex][yIndex].str);      

        xIndex++;
  } 
}

在这方面已经坚持了一段时间了,任何/所有的意见都受到赞赏和鼓励。

最佳答案

您没有检查第一个 strtok() 调用的返回值。

此外,在 while 循环中,您检查 tokPtr 是否为 NULL,但然后在使用它之前在循环体的第一行中更新它。

您需要删除初始的 eTable[xIndex][yIndex].str 集,并将第二个 strtok() 调用移至 的末尾while 循环:

  tokPtr = strtok(currentLineStr, "|");

  while(tokPtr != NULL)
  {
        eTable[xIndex][yIndex].str = tokPtr;
        //printf("%s\n", eTable[xIndex][yIndex].str);      

        tokPtr = strtok(NULL, "|");
        xIndex++;
  } 

关于c - 将 token 指针(来自 strtok)分配给结构的 2d VLA 的指针元素时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31254274/

相关文章:

c - 这个调用在 C 中是通过引用调用还是通过值调用?

c - 如何根据 var1 和 var2 在 typedef 结构中添加二维数组?

c - 字符串的奇怪错误

python - 如何将满足条件的numpy数组中的第一个值设置为1而不是其余值

javascript - 无法弄清楚如何返回正确的数组

c - 基本程序,有趣的输出?解释

c++ - 声明指针;星号位于类型和名称之间的空格左侧还是右侧?

c - 预处理器 #if 不起作用

arrays - 如何在awk中定义数组

c++ - 使用 STL 队列 pop() 销毁类指针