C 用strtok分隔字符串
我想把一行(作为一个字符串)分成几个字。例如: “你好,世界”。我可以在单词和开头有一个或多个制表符或空格。我正在尝试这样做: (findCommand是一个函数,line是作为输入获取的字符串,对于这部分,我只需要前两个单词) 我尝试在Eclipse中使用不同的空格和制表符来运行它。其中一些工作正常,另一些则出现信号错误,我不知道原因。使用C 用strtok分隔字符串,c,eclipse,string,strtok,C,Eclipse,String,Strtok,我想把一行(作为一个字符串)分成几个字。例如: “你好,世界”。我可以在单词和开头有一个或多个制表符或空格。我正在尝试这样做: (findCommand是一个函数,line是作为输入获取的字符串,对于这部分,我只需要前两个单词) 我尝试在Eclipse中使用不同的空格和制表符来运行它。其中一些工作正常,另一些则出现信号错误,我不知道原因。使用malloc((strlen(line)+1)*sizeof(char))而不是malloc(sizeof(strlen(line))。 您只为整数分配空间
malloc((strlen(line)+1)*sizeof(char))
而不是malloc(sizeof(strlen(line))
。
您只为整数分配空间,因为sizeof返回整数。这是:
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
,因为你显然是在处理字符。你从哪里得到segfault以及哪个输入?请在你的帖子中包含这些信息。malloc(strlen(line)+1)
例如“hgyj kjsdlkjdalkj”在单词之前和之间有一堆空格和制表符。由于某种原因,当我发送评论时,它们被删除了。你的malloc()-1中仍然有一个sizeof(),用于不包含终止符的空间,并推荐sizeof(char)
。如果你使用或不使用它,就不必使用char。char是一个字节,但按照惯例,如果为特定的数据类型分配空间,就应该使用它,例如long int
。我认为这不是一个好的做法,因为它不添加任何内容,只会模糊代码。此外,您的用法甚至是错误的,因为缩放中没有包含1
。请更正此问题。您不使用sizeof,因为它只适用于数据类型char。如果他将来分配空间,并且不使用sizeof,例如long int
,则可能抛出segfault。这就是为什么我将sizeof
Downvote删除了。如果您坚持使用sizeof
,我认为正确的形式是commandLine=malloc((1+strlen(line))*sizeof*commandLine)代码>,因此您不重复类型名称,而是将其锁定到一个变量。是的,您是对的,我只是使用sizeof为其他类型分配内存,所以我也会自动将其放在这里。我的错误
char *commandLine = malloc(strlen(line) + 1);