Я ожидал, что это немедленно завершится, но на самом деле на странице руководства написано:
Завершающий нулевой символ считается частью строки;поэтому, если c
равно '\0'
, функции находят завершающий '\0'
.
Конечно, результатом pos = strchr(environVar, '\0');
является то, что *pos == '\0'
и strlen(pos) == 0
.Таким образом, вы всегда копируете ровно ноль символов.Не полезно.
Вы также устанавливаете environVar = pos;
, не пропуская символ NUL.Поэтому следующий вызов strchr
возвращает environVar
, и больше никакого прогресса не происходит.
Вы также забыли инициализировать buffer
, вы передаете дикий указательв strncpy
, что приведет к повреждению случайной части памяти. Эта ошибка, вероятно, приведет к появлению уродливой головы, как только вы исправите тот факт, что параметр длины всегда равен нулю.