Из заметок в getenv
руководство:
Как обычно реализуется, getenv () возвращает указатель на строку в списке среды. Звонящий должен заботиться не
изменить эту строку, так как это изменит среду процесса.
Поскольку strtok
изменяет строку, вы должны скопировать строку, возвращаемую getenv
, а затем вызвать strtok
, используя копию:
char *str, *ptr;
char *p = getenv("somestring");
str = malloc(strlen(p) + 1);
strcpy(str, p);
ptr = strtok(str, ",");
// Make sure to deallocate the memory once you are done using it.
free(str);
Вы также можете использовать strdup
:
char *str, *ptr;
char *p = getenv("somestring");
str = strdup(p);
ptr = strtok(str, ",");
// Make sure to deallocate the memory once you are done using it.
free(str);