Почему следующий код на 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);