Я спрашиваю пользователя, какую переменную окружения он хочет узнать, а затем сканирую его с помощью scanf. Но это не работает для меня. Вот мой код:C - scanf(), а затем getenv()
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
char *value;
char input;
printf("Which variable do you want?\n");
scanf("%s", input);
value = getenv(input);
printf("%s", value);
}
Компилятор говорит:
"Назначение аргумента функции между типами "Const символ *" и "полукокса" ИСТ не допускается"
Так я пытался изменить входную переменную на: char const *input
Теперь нет ошибки компилятора, но когда я отправляю имя, например «USER», я получаю "Segmentation fault (core dumped)"
ошибка.
'char input; ... scanf ("% s", input); '->' input' недостаточно велик для хранения ввода текста пользователя. (Аналогичная проблема с http://stackoverflow.com/q/37119782/2410359) – chux
при вызове любого из семейства функций 'scanf()' 1) всегда проверяет возвращаемое значение (а не значение параметра), чтобы обеспечить выполнение операции Был успешен.2) при использовании спецификатора входного преобразования «% s» всегда используйте модификатор «max length» (который меньше, чем длина входного буфера), поэтому пользователь не может перехватить входной буфер (что приведет к неопределенному поведению и может привести к событию сбоя seg). BTW: как вы ожидаете читать в строке (NUL завершенный массив символов), когда входной буфер составляет всего 1 символ? – user3629249
относительно этой строки: 'printf ("% s ", value);' выход будет находиться в буфере stdout до тех пор, пока программа не выйдет, тогда (и только тогда) она будет фактически отображаться на терминале. Строго рекомендуем использовать: 'printf ("% s \ n ", value);' потому что '\ n' (новая строка) приведет к немедленному отображению буфера stdout на терминале. – user3629249