【发布时间】:2016-09-30 05:27:54
【问题描述】:
我已经阅读了无数的strtok 帖子,甚至直接将其中的全部内容复制到一个新的int main 中,但我不知道如何创建函数get_first 和get_second。
get_first("This is a sentence."); //returns "This"
get_rest("This is a sentence."); //returns "is"
这是我目前所拥有的,除了strtok 的问题,我什么都没有,但我不知道还能用什么。
#include <stdio.h>
#include <string.h>
char * get_first(char * string) {
string = strtok(string, " ");
return string;
}
char * get_second(char * string) {
string = strtok(string, " ");
string = strtok(NULL, " ");
return string;
}
int main(int argc, char * argv[]) {
char * test_string = "This is a sentence.";
char * first = get_first(test_string);
char * second = get_second(test_string);
printf("%s\n", first);
printf("%s\n", second);
}
使用 gcc -g -Wall 编译没有错误,但它总是 seg 错误。我想我已经尝试了char c[] 和char * c 的所有排列。
【问题讨论】:
-
首先,
strtok修改了字符串,因此它必须是可写的。您的test_string是只读的。其次,您不能在同一个字符串上调用get_second,因为get_first调用后由于strtok对其进行的修改,它将不再是原始字符串。 -
char test_string[] = ... -
@melpomene
get_second在get_first之后无法按预期工作。 -
是的,我对
strtok的细节很困惑,我想我现在对它有了更好的理解,谢谢。 -
更改这一行:
string = strtok(NULL, " ");到string = string+strlen(string);或者:``string = string+strlen(string)+1;`;
标签: c segmentation-fault strtok