Я недавно закончил университетский курс в C. Поэтому, конечно, мне не хватает опыта.
Некоторые университеты, как правило, учат своих студентов безопасному программированию, или хотя бы некоторым элементам . Есть даже видео (взято из здесь ).
Находясь в C, копируя строки, мне нужны - насколько я знаю - функции strcpy или string.h. Как вы используете это безопасно в повседневном программировании?
Есть ли у вас некоторые функции, которые обрабатывают распределение для предотвращения переполнения буфера? Для C существует стандарт безопасного кодирования CERT. Он предлагает примеры и совместимые решения:
int main(int argc, char *argv[]) {
/* ... */
char prog_name[128];
strcpy(prog_name, argv[0]);
/* ... */
}
И их альтернатива:
int main(int argc, char *argv[]) {
/* ... */
char *prog_name = (char *)malloc(strlen(argv[0])+1);
if (prog_name != NULL) {
strcpy(prog_name, argv[0]);
}
else {
/* Couldn't get the memory - recover */
}
/* ... */
}
Взят отсюда, 2-й пример .
Но, насколько я понимаю, это просто сложнее, больше кода, больше работы. Почему никто не меняет саму библиотеку? Или, по крайней мере, почему никто не предоставляет безопасную альтернативную библиотеку или функции, которые обрабатывают это правильно?
Спасибо за чтение,
wishi