从main中的数组中的函数存储标记(strtok)

时间:2016-11-29 14:19:25

标签: c arrays pointers strtok

我试图创建一个函数来分割单词中的句子并将单词存储到字符串数组中。如果我使用它运行的全局变量,字符串存储得很好并且作业已完成,但是,当我尝试传递main中定义的数组时,它不会工作。

void split(char sentence[], char *words[]){
  unsigned char n= 0;
  const char delim n= " ";
  char clone[strlen(sentence)];
  strcpy(clone, sentence);

  char *token;
  token= strtok(clone, delim);

  while(token != NULL){
    words[n++]= token;
    token= strtok(NULL, delim);
  }
  words[n]= NULL; //Needed for future usage of the array;
}

int main(){
  char *sentenceFromMain;
  sentenceFromMain= "A BB CCC DDDD";

  char *wordList[nrOfWords+1]; //I do have another function that counts words

  split(sentenceFromMain, wordList);
  exit(0);
}

如果我在函数中执行,例如,words[0]= "A";它可以正常工作。 令牌返回指针?我该怎么办才能获得存储的内容?我尝试了多种方法来做到这一点,但没有一种方法能很好地运作欢迎每一个回复!

1 个答案:

答案 0 :(得分:0)

这里的问题是strtok返回指向它标记的字符串的指针。你得到的指针将指向clone数组,该数组在split函数内是本地的。一旦split函数返回,指针将不再有效。

解决此问题的一种可能方法是不使用本地clone数组,但将其放在函数外部,并将其作为第一个参数传递,并在调用{{1}时使用该参数}}