2014-01-28 2 views
-3

Я пытаюсь разделить строки с strtok, но я не могу напечатать вторую часть моей строки.Как разбить строку с помощью strtok() в C?

int main (void) { 
    char str[128]; 
    char *ptr; 

    strcpy (str, "123456 789asdf"); 
    strtok (str, " ", &ptr); 

    printf ("'%s' '%s'\n", str, ptr); 
    return 0; 
} 

результат что-то вроде этого:

'123456' '12jfs90123#4' 
+4

Как насчет чтения документации функции перед ее использованием? –

+0

В дополнение к ответам ниже я хотел бы указать, что вам также необходимо включить соответствующий заголовок, в этом случае '#include '. Кроме того, '' должен быть включен для printf. – jpw

ответ

1

Он смотрит на меня, как вы поняли хау strtok работы.

Второй параметр должен указывать на строку символов разделителя. «Текущая» строка - это возвращаемое значение. При первом вызове вы передаете строку, которую хотите разбить. При последующих вызовах вы передаете NULL для первого параметра.

strtok также изменяет строку, которую вы передаете, поэтому вы должны не никогда не передавать строковый литерал в качестве первого параметра.

Рабочий код обычно выглядит по крайней мере, немного больше, как это:

char input[] = "123456 789asdf"; 

char *substring = strtok(input, " "); 

do { 
    printf("%s\n", substring); 
} while (strtok(NULL, " ")); 

Если, однако, вы знаете, что вы только собираетесь искать два аргумента, это, вероятно, проще использовать scanf:

char s1[256], s2[256]; 

sscanf(str, "%255s %255s", s1, s2); 
+0

Также, вероятно, OP пытается использовать 'strtok_r' – P0W

1

strtok() работает немного иначе, чем так, как вы использовали его:

char str[] = "123456 789asdf"; 

char* token = strtok (str, " "); 
char* token2 = strtok (NULL, " "); 
printf ("'%s' '%s'\n", token, token2); 

выдает желаемое значение: '123456' '789asdf'

+0

http://ideone.com/yPmUuz – P0W

1

Вам нужно продолжать звонить strtok, пока он не вернет NULL, поскольку strtok возвращает один токен, полученный в результате расщепления при каждом вызове функции. Этот рабочий код:

int main (void) { 
    char str[128]; 
    char *ptr; 

    strcpy (str, "123456 789asdf"); 
    ptr = strtok (str, " "); 

    while(ptr != NULL) 
    { 
     printf ("'%s'\n", ptr); 
     ptr = strtok(NULL, " "); 
    } 

    return 0; 
} 
Смежные вопросы