2007年3月13日星期二

关于函数printf()[2]

有下面一段代码:
...
char str[20];
...
scanf("Please input a string less than 20: %s", str);
...
printf(str);
...

危险在于:若用户输入的字符串中包含格式化参数如%x、%d等等,语句printf(str)将会把邻接内存内的内容按照所给的格式化参数打印出来。更危险的是,如果用户输入的字符串中使用了%n,则会向相应的内存中写入数据。格式化参数$的使用则会便利这种危险的内存注入。
因此,正确的写法应该是
printf("%s", str);

没有评论: