【发布时间】:2017-02-05 19:25:10
【问题描述】:
user_input = "%s%s%s%s%s%s%s%s";
printf("user input is: %s", user_input);
...崩溃!
以上行导致错误。我想编写一个可以像printf 一样使用的函数,但可以在第一个参数之后清理所有参数,以确保它们不包含% 符号。该函数应该像'printf'一样使用,因为它可以接受任意数量的参数,并以相同的方式打印出一个字符串。如果其他参数包含% 符号,我只想在将其放入格式字符串之前取出该符号。
如果这个新函数被称为safe_printf,我希望行为是这样的:
user_input = "%s%s%s%s%s%s%s%s";
safe_printf("user input is: %s, user_input);
用户输入是:ssssssss
似乎编写这样的函数可能是不可能的,(我不知道如何预处理 va_list 中的 char *s 不知道有多少)如果是这种情况,请告诉我。谢谢!
【问题讨论】:
-
显示的“用户输入”不会崩溃
printf()。如果您使用printf(user_input, "just one argument")或其他用户输入控制格式的变体,它可能会崩溃。您的safe_printf调用不正确;你有第二个双引号......在错误的地方;或者实际上,它完全消失了。您的崩溃可能是因为您尝试从不可修改的字符串文字中删除百分比符号;它们通常不可写。 -
我对@987654330@ 的行为感到困惑。我没有意识到格式字符串是唯一能够导致这种崩溃的参数。感谢您的澄清。
标签: c security printf variadic-functions