Как назначить строку, которая разбивается на новые переменные? - PullRequest
0 голосов
/ 30 сентября 2018

Возможно, заголовок может сбивать с толку, но я имею в виду, что у меня есть код, показанный ниже:

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 строки, которые «привет»,«my», «name», «is» для нового массива String, например «char * string [4]».
Однако я пока не достиг.

1 Ответ

0 голосов
/ 30 сентября 2018

Помните, что 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...