История изменений
Исправление Xenius, (текущая версия) :
[code] char buf[20];
scanf(«%19s», buf);
Ага (в смысле, переполнения не будет), только в отличие от printf это вот 19 в scanf'е почему-то нельзя взять из параметров. Следовательно, нельзя привязать к тем 20. Уволить не уволят, но публичную порку устроят.
А в scanf разве нельзя подсунуть что-то вроде этого:
int buf_size = 20;
char *buf = malloc(buf_size);
char format_string[32];
sprintf(*format_string, "%%%ds", buf_size-1);
scanf(format_string, buf);
Давно на C не писал, мог что-то напутать, плюс нет проверок на успешность маллока и тд, но как-то так.
Исправление Xenius, :
[code] char buf[20];
scanf(«%19s», buf);
Ага (в смысле, переполнения не будет), только в отличие от printf это вот 19 в scanf'е почему-то нельзя взять из параметров. Следовательно, нельзя привязать к тем 20. Уволить не уволят, но публичную порку устроят.
А в scanf разве нельзя подсунуть что-то вроде этого:
int buf_size = 20;
char *buf = malloc(buf_size);
char *format_string;
sprintf(*format_string, "%%%ds", buf_size-1);
scanf(format_string, buf);
Давно на C не писал, мог что-то напутать, плюс нет проверок на успешность маллока и тд, но как-то так.
Исходная версия Xenius, :
[code] char buf[20];
scanf(«%19s», buf);
Ага (в смысле, переполнения не будет), только в отличие от printf это вот 19 в scanf'е почему-то нельзя взять из параметров. Следовательно, нельзя привязать к тем 20. Уволить не уволят, но публичную порку устроят.
А в scanf разве нельзя подсунуть что-то вроде этого:
int buf_size = 20;
char *buf = malloc(buf_size);
char *format_string;
sprintf(*format_string, "%%%ds", buf_size);
scanf(format_string, buf);
Давно на C не писал, мог что-то напутать, плюс нет проверок на успешность маллока и тд, но как-то так.