Здесь
char* userInput;
userInput
не имеет допустимой памяти, поэтому вы можете поместить в нее некоторые данные, например
gets(userInput); /* this causes seg.fault because till now userInput doesn't have any valid memory */
. Чтобы преодолеть эту проблему, используйте символмассив типа
char userInput[100] = {0};
или создать динамический массив, а затем сканировать данные в динамически выделенную память.
Также не используйте gets()
, используйте fgets()
вместо этого, как указано в здесь
Например,
char* userInput = malloc(SOME_SIZE); /* define SOME_SIZE, creating dynamic array equal to SOME_SIZE */
fgets(userInput ,SOME_SIZE, stdin) ; /* scan the data from user & store into dynamically created buffer */
Примечание:со страницы руководства с fgets
Если читается символ новой строки , он сохраняется в буфере .Завершающий нулевой байт (aq \ 0aq) сохраняется после последнего символа в буфере.
Поэтому удалите завершающий символ новой строки, вызвав strcspn()
.Например,
userInput[strcspn(userInput, "\n")] = 0;
И как только использование динамического массива userInput
завершено, не забудьте освободить динамически распределенную память, вызвав free()
, чтобы избежать утечки памяти .Например,
free(userInput);