Проблемы легиона.
Я ожидаю, что дамп ядра происходит из-за того, что строка "1-2-3-4"
хранится в постоянной памяти, поэтому, когда strtok()
изменяет ее (чтобы изолировать первый токен)программа вылетает.Вы говорите, что авария в strtol()
;это предполагает, что возвращаемое значение из strtok()
равно NULL.
Первый вызов strtok()
использует строку в качестве аргумента;второй вызов проходит NULL на своем месте, чтобы указать «продолжить с того места, где вы остановились в прошлый раз».Как написано, если бы строка была модифицируемой, то вы бы проанализировали 1
четыре раза.
Это ближе к правильному (хотя и не проверено):
char input[] = "1-2-3-4";
char *data = input;
for (int i = 0; i < 4; i++)
{
char *token = strtok(data, "-");
if (token != 0)
{
long int a = strtol(token, NULL, 10);
cout << a << endl;
}
data = NULL;
}
В общем, вам нужносделать обнаружение ошибок от strtol()
;Далее, это довольно чревато.Однако с примером строки вам не придется беспокоиться об этом.