2013-09-26 3 views
1
pch = strtok(str," "); 
strcpy(piece1,pch); 
printf("\n piece1 : %s \n",piece1); 
while(pch != NULL){ 
     printf("\n %s \n",pch); 
     pch = strtok(NULL," "); 
     if(pch != NULL){ 
       strcpy(piece2,pch); 
       printf("\n piece2 : %s \n",piece2); 
     } 
} 

strtok(str, " ") заполняет пространство в строке с '\0'. что делает strtok(NULL, " ")? как он разделяет оставшиеся строки после получения первого токена.strtok функция программирования C

+5

Per 'man strtok': * Функция strtok() анализирует строку в последовательности токенов. При первом вызове strtok() строчная строка должна быть указана на str. ** В каждом последующем вызове, который должен анализировать одну и ту же строку , str должен быть NULL. *** – lurker

+0

Этот вопрос не соответствует теме, потому что речь идет о ложной подаче документации для OP. –

+1

[strtok.c] (http://www.opensource.apple.com/source/Libc/Libc-166/string.subproj/strtok.c) –

ответ

3

strtok делает некоторые вещи, которые можно воспринимать как опасные. А именно, когда вы вызываете его, а первый аргумент не равен NULL, он сохраняет этот аргумент и некоторую другую информацию в статических переменных (что делает его полностью небезопасным).

Пока вы продолжаете передавать нуль, он использует тот же массив символов, который вы изначально передали, чтобы искать больше токенов.

На самом деле, скорее всего, реализация заключается в том, что она сохраняет место, которое оно было в вашей строке, в статической переменной. Его не должно волновать, где началась ваша строка; он заботится только о том, где он находится в вашей строке.

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

Смежные вопросы