strtok无法使用通话功能

时间:2013-11-15 21:55:25

标签: c strtok

strtok()崩溃了。它适用于main(),但不适用于call函数。 请建议我。谢谢。

int checkNumberOfTokens (char* text, char* delimitChar) {

    int numberOfTokens = 0;
    char *t;
    int i;

    printf("Text: %s\n", text);  
    printf("delimitChar: %s\n", delimitChar);

    t = strtok(text, delimitChar);

    for (i=0; t != NULL; i++) {
        printf("token %d is \"%s\"\n", i, t);
        t = strtok(NULL, delimitChar);
        }

        numberOfTokens = i;
        printf("Total number of tokens: %d\n", numberOfTokens);    

        return numberOfTokens;
}




int main()

    char* transitionTable[] = {
                              "NA, NA, NA, NA, NA, NA",
                              "defaultStart, elseOther, 1, 2, 6, NA",

          };

          printf("%s \n", transitionTable[1]);

    char delimitChar[] = ",";

    checkNumberOfTokens (transitionTable[1], delimitChar);

2 个答案:

答案 0 :(得分:3)

strtok输入字符串必须是可写的,因为strtok修改输入字符串。但是你传递的是字符串文字,字符串文字是不可修改的。

请参阅字符串文字的c-faq:

http://c-faq.com/decl/strlitinit.html

答案 1 :(得分:2)

问题:你传入一个字符串文字(只读);但是strtok()希望能够修改字符串。

建议:尝试strchr()而不是strtok()。

实施例

#include <stdio.h>
#include <string.h>

int
checkNumberOfTokens (char * text, char delimitChar) 
{
  char *s = text;
  int ct = 1;
  if ((s == NULL) || (strlen(s) == 0))
    return 0;

  while ((s = strchr(s, delimitChar))) {
    s++;
    ct++;
  }
  return ct;
}

int main(int argc, char *argv[]) 
{
   int ct = checkNumberOfTokens("ABC,DEF,GEHI", ',');
   printf ("ct=%d\n", ct);
   return 0;
}