【问题标题】:strtok segmentation fault, another way to split strings?strtok 分段错误,另一种拆分字符串的方法?
【发布时间】:2017-08-25 02:27:16
【问题描述】:

好吧,我在使用 Strtok 时遇到了麻烦。我读过很多帖子说我不能将 char * 与 strtok 一起使用,但是,我还能用什么来分割字符串 (char*)?或者你知道一些使用带有指针的 strtok 的方法吗?

int play(char** matrixGame, char** matrixUser, int rows, int columns, char* input)
{
   char * token2;
   int x,y;
   char * inputPlay;

   inputPlay = (char*)malloc(sizeof(char)*10);

   token2 = strtok(input, " ");
   x = atoi(token2);

   token2 = strtok(NULL, " ");
   y = atoi(token2);

   token2 = strtok(NULL, " ");
   strcpy(inputPlay,token2);    
}

希望你们能帮帮我,谢谢。

【问题讨论】:

  • 根据strtok document,当找不到更多令牌时,它可以并且将返回NULL。所以你的代码必须检查这种情况。
  • 您的代码中的inputAux 是什么?是不是打错字了?
  • @informaton 哦,没什么,我正在尝试一些东西,但忘了改变它
  • @SSC 我会试试的,谢谢 :)
  • token2 = strtok(inputPlay, " "); --> token2 = strtok(input, " "); ?

标签: c strtok


【解决方案1】:

这些答案解决了OP的问题strtok segmentation fault, another way to split strings?

还有另一个名为strsep 的函数,但它不是标准化的。根据您的使用情况,您也可以使用它。 (以便携性为代价)。

您可以编写自己的strtok 版本,丢弃您不喜欢strtok 的内容。

您可以通过前面讨论的这个线程好好看看这个discussion。如果您为自己的目的实现它们,则可以解决诸如更改第一个参数或不处理常量 char 数组之类的问题。

【讨论】:

  • 这个想法是不使用 char[],这是我的问题。不过还是谢谢
  • @GustavoHurtado.:啊,如果你愿意,我可以修改答案。还是你解决了?
【解决方案2】:

我发现了正在发生的事情。我之前在另一个使用 strtok 的函数中使用了 input,我认为输入是一些像 2 2 x 这样的字符串,但是 strtok 修改了我的输入,它只是一个 2,而不是完整的字符串。所以,不要使用相同的变量。 非常感谢各位。

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多