将字符串分为'first'和'second'

时间:2016-09-30 05:27:55

标签: c segmentation-fault strtok

我已阅读了无数strtok个帖子,甚至将其中的一些内容直接复制到新的int main中,但我无法弄清楚如何创建函数get_first和{ {1}}。

get_second

到目前为止,这是我所拥有的get_first("This is a sentence."); //returns "This" get_rest("This is a sentence."); //returns "is" ,但我不知道还有什么问题。

strtok

使用gcc -g -Wall编译没有错误,但它总是会出错。我想我已经尝试了#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); } char c[]的所有排列。

1 个答案:

答案 0 :(得分:1)

strtok更改字符串。 (但不允许更改字符串文字。)
所以创建一个副本。

执行以下操作:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char * get_first(const char *string){
    char *clone = strdup(string);//create copy, strdup is non standard. malloc and copy.
    char *token = strtok(clone, " ");
    if(token)
        token = strdup(token);
    free(clone);
    return token;
}

char * get_second(const char *string) {
    char *clone = strdup(string);
    char *token = strtok(clone, " ");
    if(token && (token = strtok(NULL, " ")))
        token = strdup(token);
    free(clone);
    return token;
}

int main(void) {
    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);
    free(first);
    free(second);
}