LINUX.ORG.RU

История изменений

Исправление 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 не писал, мог что-то напутать, плюс нет проверок на успешность маллока и тд, но как-то так.