buffer
- неправильный тип для хранения массива строк.Он должен быть определен как:
char **buffer;
Кроме того, вы должны malloc
сделать следующее:
buffer = malloc(i * sizeof(*buffer));
Использовать явно sizeof(*buffer)
вместо магического числа 8, так как указательне гарантируется, что будет 8 байтов.Это также предпочтительнее sizeof(char *)
, поскольку оно не зависит от типа buffer
Кроме того, не приводит к возвращаемому значению malloc
.
, поскольку env
завершается указателем NULL, вы захотите сделать то же самое с buffer
.Вам также следует скопировать строки с помощью strdup
вместо простого копирования указателей, чтобы вы могли работать с отдельной копией:
char **buffer = malloc((i+1) * sizeof(*buffer));
for (i = 0; envp[i] != 0 ; i++)
{
buffer[i] = strdup(envp[i]);
printf("%s\n", envp[i]);
printf("%s\n", buffer[i]);
}
buffer[i] = NULL;