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);
答案 0 :(得分:3)
strtok
输入字符串必须是可写的,因为strtok
修改输入字符串。但是你传递的是字符串文字,字符串文字是不可修改的。
请参阅字符串文字的c-faq:
答案 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;
}