用strtok分隔字符串

时间:2013-12-05 09:18:54

标签: c eclipse string strtok

我希望将一行(作为一个字符串给出)分成单词。例如: “ 你好,世界”。我可以在单词之间和开头之间有一个或多个制表符或空格。我正在尝试做这样的事情: (findCommand是一个函数,line是我得到的字符串作为输入,对于这部分我只需要前两个单词)

CommandResult findCommand (const char* line){
    char* commandLine = malloc(strlen(line)+1);
    strcpy(commandLine, line);
    char space[] = " \t";
    char* word1 = strtok(commandLine,space);
    char* word2 = strtok(NULL,space);

我试图在Eclipse中使用不同的空格和制表符来运行它。其中一些工作正常,对其他人我有一个sigmentation错误,我无法弄清楚原因。

2 个答案:

答案 0 :(得分:1)

此:

char* commandLine = malloc(sizeof(strlen(line)));

错了。您不应在此处使用sizeof,而肯定不会在调用strlen()的结果中使用。以上内容与:

相同
char *commandLine = malloc(sizeof (size_t));

因为strlen()的返回类型为size_t。因此,忽略实际的strlen()返回值。

正确的代码是:

char *commandLine = malloc(strlen(line) + 1);

因为您必须为终结符添加1,这不包括在strlen()返回的长度中。

此处不需要任何sizeof,因为您非常明显地使用字符。

答案 1 :(得分:0)

使用malloc((strlen(line) + 1)* sizeof(char))代替malloc(sizeof(strlen(line)))。 您只为整数分配空间,因为sizeof返回一个整数。