如何分配拆分为新变量的字符串?

时间:2018-09-30 13:27:28

标签: c string token

也许标题可能令人困惑,但是我的意思是我有一个如下代码:

char str[25]="hello my name is  ";
const char ayir[]=" ";
char *token;

token=strtok(str,ayir);
while( token !=NULL ) {
    printf( "%s\n", token );
    token = strtok(NULL, ayir);
}

并且我只想将具有4个字符串的变量(令牌)分配给新字符串数组,例如“ hello”,“ my”,“ name”,“ is”,例如“ char * string [4]”。 /> 但是,到目前为止我还没有取得成就。

1 个答案:

答案 0 :(得分:2)

请记住,strtok不会创建新字符串。特别是当您要重新使用被标记化的字符串时,必须将标记复制到新的内存中。

如果您的输入缓冲区没有被重复使用,那么这是简单的版本:

#define MAX_TOKENS 4
char str[25]="hello my name is  ";
const char ayir[]=" ";
char *token, *tokens[MAX_TOKENS];
int i= 0;

token=strtok(str,ayir);
while (token !=NULL && i<MAX_TOKENS) {
    tokens[i]= token;
    printf( "%s\n", tokens[i] );
    i++;
    token = strtok(NULL, ayir);
}

如果您的输入缓冲区被重复使用,那么您还必须分配新的内存:

#define MAX_TOKENS 4
char str[25]="hello my name is  ";
const char ayir[]=" ";
char *token, *tokens[MAX_TOKENS];
int i= 0;

token=strtok(str,ayir);
while (token !=NULL && i<MAX_TOKENS) {
    tokens[i]= malloc(strlen(token)+1);
    strcpy(tokens[i], token);
    printf( "%s\n", tokens[i] );
    i++;
    token = strtok(NULL, ayir);
}