我已阅读了无数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[]
的所有排列。
答案 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);
}