Почему следующий код на c работает в turbo c, а не в devC++?

У меня есть следующий кусок кода:

char *str;
gets(str);

Теперь он работает в Turbo C, но не в DevC.

Я должен добавить следующее, чтобы заставить его работать в devC++.

char *str = malloc(5);

Кто-нибудь может объяснить, почему это так?

Кроме того, какая из них является подлинной и более правильной формой кодирования.

1 ответ

gets(str);

Он не должен работать даже в Turbo C++, потому что вы не выделили пространство для str. правильный путь

 str = (char *)malloc(sizeof(char) * (length+1));

Тот

char *str;
gets(str);

просто не может быть прав. str не инициализируется, и gets получает указатель по значению, поэтому он не может выделить его внутри. Вам просто повезло / не повезло с неопределенным поведением.

какая из них является подлинной и более правильной формой кодирования?

Ни один из вышеперечисленных. не использоватьgets, Это небезопасно, потому что вы не можете ограничить размер ввода. использование fgets с указанным размером (и выделенным буфером, конечно!)

#include <stdio.h>
char buffer[20];
fgets(buffer, sizeof(buffer), stdin); // reads at most 19 chars + null-termination

или же scanf с ограничением размера (обратите внимание на -1): scanf("%19s",buffer);

Другие вопросы по тегам