2015-05-19 3 views
1

Я использую утверждение, которое имеет побочный эффект, но я не могу понять, почему. Если я использую это утверждение, то остальное - это мои разрывы в программе.Почему это утверждение имеет непреднамеренные побочные эффекты?

token3 = strtok(pathValue, ":");

Переменные token3 и pathvalue не используются нигде так не должно быть побочным эффектом. Но если я их включу, я получаю ошибку времени выполнения при попытке запустить другую часть программы. Что я сделал не так? Вся программа - это Linux-программа, которая является моей собственной оболочкой, работающей аналогично bash, а токенизация - найти, если в системе установлено меньше.

ответ

5

Эта страница manual page для getenv() является ключом богатых:

Строка, на которую указывает возвращаемое значение getenv() может быть статически выделено, и может быть изменена с помощью последующего вызова getenv(), putenv(3), setenv(3), или unsetenv(3).

Так что, вероятно, неплохо было бы обойти и изменить это, что будет делать strtok(). Попробуйте сначала скопировать строку.

Урок: всегда Будьте осторожны, когда функции C возвращают указатели в целом и строки в частности. Кому принадлежит указатель на память?

+0

Прохладный, он работал с изменением, просто копируя строку. –