В следующей программе C strtok
используется для разделения строки. Программа дает исключение, но я не могу понять, как это работает.Как и почему strtok запоминает строку?
Во-первых, мы прошли строка tokenize и разделитель. Но в последующих итерациях мы просто проходим NULL
. Как и почему функция запоминает строку?
Что делать, если я хочу использовать tokenize для разных строк одновременно?
#include "stdafx.h"
#include <cstdio>
#include <cstring>
int main(int argc, char* argv[])
{
char arr[] = "This is string to split";
char * subStr = new char[10];
subStr = strtok(arr, " ");
while (subStr)
{
printf("%s\n", subStr);
subStr = strtok(NULL, " ");
}
return 0;
}
Выход:
This
is
string
to
split
Если он не будет помнить, как он будет знать, какое токен для возврата, первый или второй или последний. –
@MadHatter, Могут быть способы, мы можем снова и снова передавать новую строку. Вопрос в том, что текущий подход не позволяет ему работать только по одной строке. –
Для «как он помнит» может быть «статический указатель». Я не думаю, что можно использовать динамическое распределение, так как когда он будет знать, что «освобождает» память. –