Я пытаюсь выяснить, вводит ли пользователь «h», чтобы я мог запускать другую функцию, но по какой-то причине, когда я запускаю программу, она указывает на ошибку сегментации. Любая помощь будет оценена по достоинству.Сравнение ввода пользователя со строкой в C
char checkh[] = "h";
char *checkInput;
printf("Enter input:");
scanf("%s", checkInput);
if(strcmp(checkInput, checkh) == 0){
helpMsg();
}
Память выделена для 'checkInput'. Вам нужен массив. Но не используйте 'scanf()' для получения пользовательского ввода, это зло. Просто объявите буфер (массив 'char's), затем вызовите' fgets (buf, sizeof buf, stdin) '. Но это повторяется много раз. Я имею в виду сотни раз. Почему вы не могли потратить минуту или две на поиск решения такой тривиальной ошибки? –
@ H2CO3 все, что вы сказали, у меня большие пальцы, кроме комментария 'scanf'. Вы можете защитить от переполнения с префиксом длины: '% Ns'. Важно только, если вы не хотите есть целую линию из потока, так как 'fgets()' будет с достаточным буфером. Если это не важно, 'fgets()' является выбором defacto. = P – WhozCraig
@WhozCraig Правда, и я это знаю, но ИМХО это еще более зло. 'scanf ("% Ns ")' does ** not ** NUL-terminate, если вход слишком длинный, поэтому он кажется безопасным, но на самом деле он небезопасен. ** Довольно, пожалуйста, не предлагайте его использование. ** И вообще, 'scanf()' имеет неинтуитивные причуды, которые делают программирование излишне сложным. Нет необходимости в этом. –