c++ - 由于参数变量中的 %s,sprintf 崩溃

标签 c++ c printf format-specifiers

我有一个 sprintf 命令由于参数变量中的 %s 而崩溃。除了使用 %%.

转义参数字符串之外,建议的解决方法是什么?
char* s="abc%sabc";
char a[100];
sprintf(a,"The message is : %s",s);

我们将不胜感激。

最佳答案

不要使用 printf 打印任意字符串。使用 puts 或格式化字符串:

char const *evil;

// Bad:
printf(evil);

// Good:
puts(evil);
fputs(evil, stdout);

// Acceptable:
printf("%s", evil);

请注意,“坏”版本不仅在某些沉闷的计算机科学方面在理论上是坏的,而且实际上可以立即利用它来执行任意代码和泄露数据,这要归功于 %n-like格式处理。

关于c++ - 由于参数变量中的 %s,sprintf 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18952670/

相关文章:

c++ - 是否可以将 "delete"放在逗号表达式中

c++ - 测量 CPU 时钟速度

c# - c++代码(malloc方法)到c#代码

c - c中的时间限制和错误输出

java - Hackerrank Java Map问题超时问题

c - scanf 并非在每次循环迭代时都执行

c++ - 有效 C++ : discouraging protected inheritance?

c++ - 为什么在不需要时使用这么多宏

c++ - GNU 编译器 vs. Visual Studio 在数组上分配 w/Length Constant w/in a Scope

c - atoi — 如何识别零和错误之间的区别?