ошибка сегментации getenv()

Я должен сделать свою домашнюю работу, но я не могу пройти путь в C. Например;

int main(void) {
  char *path;
  path = getenv("PATH");
  if(path)
    printf("The current path is: %s\n", path);
  return 0;
}

Если я запускаю этот код, я получаю «Ошибка сегментации (сброс ядра)». Моя ОС Ubuntu 14.04 LTS.


person SemihY    schedule 07.12.2014    source источник
comment
Вы уже пропустили его через gdb?   -  person Ignacio Vazquez-Abrams    schedule 08.12.2014
comment
Приведенный выше код отлично работает для меня. Вы уверены, что это может воспроизвести вашу проблему?   -  person 5gon12eder    schedule 08.12.2014
comment
НЕ ИГНОРИРУЙТЕ ПРЕДУПРЕЖДЕНИЯ ОТ КОМПИЛЯТОРА - они точно сообщат вам, в чем проблема. Использование -Wall для получения еще большего количества предупреждений (и уделение им внимания) также является хорошей идеей.   -  person Chris Dodd    schedule 08.12.2014


Ответы (1)


Добавлять

#include <stdlib.h>

в начало списка и попробуйте. Это может быть предполагаемый возврат int для getenv к указателю char *, отключающему код.

person Brian Tiffin    schedule 07.12.2014
comment
Если проблема в этом, то stdio.h также должно быть #included для printf. - person 5gon12eder; 08.12.2014
comment
Я пробовал это сам, и действительно, после добавления этой строки это работает. - person Crembo; 08.12.2014
comment
Это связано со знаком, расширяющим 64-битные значения. Используя %p в printf, вы увидите 'pointer variable: 0xffffffffa30d6982' Segmentation fault (core dumped) адрес 0x7ffffffffx30d6982 как неправильно приведенный из-за предположения о возврате. То есть правильно объявить getenv. Включение stdio.h на самом деле не помогло бы с неправильным преобразованием из getenv, но, тем не менее, оно разумно и правильно. - person Brian Tiffin; 08.12.2014