2014-12-07 4 views
2

Мне нужно сделать домашнее задание, но я не могу взять путь в C. Например;getenv() segmentation fault

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

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

+0

Прошли ли вы через gdb? –

+0

Приведенный выше код отлично подходит для меня. Вы уверены, что это может воспроизвести вашу проблему? – 5gon12eder

+3

НЕ ИГНОРИРУЙТЕ ПРЕДУПРЕЖДЕНИЯ ОТ КОМПЬЮТЕРА - они точно сообщают вам, в чем проблема. Использование '-Wall' для получения еще большего количества предупреждений (и обращая на них внимание) также является хорошей идеей. –

ответ

6

Добавить

#include <stdlib.h> 

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

+0

Если это проблема, то 'stdio.h' должен быть' # include'd также для 'printf'. – 5gon12eder

+0

Я пробовал это сам, и действительно, он работает после добавления этой строки. – Crembo

+1

Это связано с расширением знака 64 бит. Используя% p в printf, вы увидите «переменную указателя»: 0xffffffffa30d6982 « Ошибка сегментации (сбрасывается ядром)». Адрес 0x7fffffffx30d6982 как неправильно введенный из-за предположения о возврате. То есть правильно объявить getenv. В том числе stdio.h на самом деле не поможет с ошибкой от getenv, но это разумно и правильно, независимо. –