Ваш код имеет две существенные проблемы. Во-первых, если вы хотите ввести строку символов, ваш вызов malloc
должен выделить место для более чем одного символа; Вы должны выделить максимальное количество символов, которое, по вашему мнению, будет содержать ввод пользователя плюс одна - строки в C имеют нулевой (nul
) символ в конце, чтобы обозначить конец строки) .
Во-вторых, когда вы используете функцию scanf_s
для чтения в строке (используя спецификатор формата %s
, как вы сделали), вам нужно добавить дополнительные параметры. (размер целевого строкового буфера) после каждого строкового аргумента.
Вот модифицированная версия вашего кода с этими (и некоторыми другими) исправлениями:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
char* string = malloc(5); //local variable for a character string (up to 5 chars)
char* yes = "yes";
printf("Do you want to play (y/n)?");
scanf_s("%s", string, 5);
if (strcmp(yes, string) == 0) {
printf("Hello welcome...");
}
free(string); // Don't forget to release the memory!
return 0; // Conventionally, return 0 for success or non-zero on error
}
Примечание 1: Каждый и каждый вызов malloc
(или calloc
) должен быть связан с вызовом free
для освобождения выделенной памяти, или вы получите утечки памяти .
Примечание 2: Пожалуйста, прочитайте этот пост: Должен ли я привести результат mallo c?
Примечание 3: Хотя большинство (все?) C компиляторов не будут настаивать на этом, рекомендуется явно добавить оператор return 0;
(для успеха) a t конец функции main
.
Пожалуйста, не стесняйтесь спрашивать о каких-либо дополнительных разъяснениях и / или объяснениях.