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

break a string into 'first' and 'second'

我看了无数strtok帖子,甚至直接完整地复制了一些到一个新的int main,但我不知道如何创建函数get_firstget_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 编译没有错误,但它总是会出现错误。我想我已经尝试了 char c[]char * c 的所有排列。

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);
}