在循环中调用strtok()时的Segfault

时间:2015-11-06 19:41:19

标签: c segmentation-fault

这保持了segfaulting,我不知道为什么......我知道你应该避免使用strtok的指针,所以我正在使用文字......任何人都有任何想法?

int getParameters(char input[], char *cmdArgs[]){
  char* cmd;
  int i = 0;
  cmd = strtok(input, " ");
  while( cmd != NULL)
  {
    cmdArgs[i] = cmd;
    cmd = strtok(NULL, " ");
    i++;
  }
  return 0;
}

编辑:

拿出另一个...来自我试过的评论实现。还添加了cmd ...的声明也因为注释的实现而被删除

编辑2:

我删除了文字的支持指针...我的新实现如下。只有当它进入循环时才会出现段错误。

int getParameters(char *input, char *cmdArgs[]){
  char *cmd;
  int i = 0;
  cmd = strtok(input, " ");
  while( cmd != NULL)
  {
    cmdArgs[i] = cmd;
    cmd = strtok(NULL, " ");
    i++;
  }
  return 0;
}

2 个答案:

答案 0 :(得分:0)

这是strtok的规范。 char * strtok(char * str,const char * delimiters);

你的另一个指针指向哪里?它是什么类型的?

答案 1 :(得分:0)

*cmdArgs[]是一个固定大小的double *指针。如果您动态增长它,则必须为每个读取cmdArg调用malloc

所以你的段错是因为你可能在cmdArgs的分配空间之外写的,也就是说我可能会超过cmdArgs的宽度

cmd的类型声明是什么?