Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用strtok分隔字符串_C_Eclipse_String_Strtok - Fatal编程技术网

C 用strtok分隔字符串

C 用strtok分隔字符串,c,eclipse,string,strtok,C,Eclipse,String,Strtok,我想把一行(作为一个字符串)分成几个字。例如: “你好,世界”。我可以在单词和开头有一个或多个制表符或空格。我正在尝试这样做: (findCommand是一个函数,line是作为输入获取的字符串,对于这部分,我只需要前两个单词) 我尝试在Eclipse中使用不同的空格和制表符来运行它。其中一些工作正常,另一些则出现信号错误,我不知道原因。使用malloc((strlen(line)+1)*sizeof(char))而不是malloc(sizeof(strlen(line))。 您只为整数分配空间

我想把一行(作为一个字符串)分成几个字。例如: “你好,世界”。我可以在单词和开头有一个或多个制表符或空格。我正在尝试这样做: (findCommand是一个函数,line是作为输入获取的字符串,对于这部分,我只需要前两个单词)

我尝试在Eclipse中使用不同的空格和制表符来运行它。其中一些工作正常,另一些则出现信号错误,我不知道原因。

使用
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);