#cpp #c #безопасность #инспекция_кода #language_lawyer
http://ideone.com/ffjDAv #includechar *names = "Windows\0System\0Config\0"; int main() { int l, r; for (char *name=names; *name; name+=r-l+1) if (printf("Folder: %n%s%n\n", &l, name, &(r=0)), !r) break; // Произошла ошибка, вероятно, стоит что-то сделать return 0; } Понятно, что при скармливании printfу пользовательских строк в качестве формата, %n может сделать что-то нехорошее. Но есть ли от него вред в подобном коде по сравнению с вариантом, в котором он не используется? http://ideone.com/xd5SYu #include #include char *names = "Windows\0System\0Config\0"; int main() { for (char *name=names; *name; name+=strlen(name)+1) printf("Folder: %s\n", name); return 0; } PS: На основе обсуждения в другом ответе.
Ответы
Ответ 1
Если потом вместо printf кто-нибудь напишет wprintf - то первый код сломается для строк, содержащих национальные символы.
Комментариев нет:
Отправить комментарий