strtok () - почему вы должны передать нулевой указатель, чтобы получить следующий токен в строке?

это объяснение strtok ().

#include <string.h>
char* strtok( char* s1, 
              const char* s2 );*

первый вызов strtok () возвращает указатель на первый токен в строка, на которую указывает s1. Последующие вызовы strtok () должны передавать значение NULL указатель в качестве первого аргумента, чтобы получить следующий токен в строка.

но я не знаю, почему вы должны передать нулевой указатель, чтобы получить следующий токен в строке. Я искал около 15 минут, но не обнаружила объяснение в интернете.

2 ответов


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

может быть лучшее, что вы можете сделать, это найти фактическую реализацию '; lastToken = tmp + 1; } else { /* Last segment, remember that. */ lastToken = NULL; } return s1; }


Если вы передаете ненулевое значение, вы просите его начать токенизацию другой строки.

Если вы передаете значение NULL, вы просите продолжить токенизацию того же, что и раньше.