我希望将一行(作为一个字符串给出)分成单词。例如: “ 你好,世界”。我可以在单词之间和开头之间有一个或多个制表符或空格。我正在尝试做这样的事情: (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错误,我无法弄清楚原因。
答案 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返回一个整数。