我知道printf(user_input)很危险,但printf("%s", user_input)呢?只要user_input被NUL终止,这通常是安全的吗?

推荐答案

我知道printf(user_input)很危险,但printf("%s", user_input)呢?这通常是安全的吗?

后者是通常为前者推荐的替代方案之一.它可以解析为the issue that makes printf(user_input) particularly dangerous.

还有一些更一般的问题,比如如果user_input不是指向以空结尾的字符串的指针,或者如果字符串包含从输出设备引发特殊行为的字符,或者如果标准输出流已经关闭,或者可能是其他事情,会发生什么.

我不确定"总体安全"是不是很好地描述了这一切,但也许这确实是你的意思.

C++相关问答推荐

为什么已经设置的值在C中被重置为for循环条件中的新值?

POSIX文件描述符位置

是否定义了数组指针类型转换为指针类型?""""

在C中使用强制转换将uint16_t转换为uint8_t [2]是否有效?

如何在C宏中确定 struct 中元素的类型?

如何确保在C程序中将包含uft8字符的字符串正确写入MySQL?

为什么指针运算会产生错误的结果?

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

在libwget中启用Cookie会导致分段故障

获取前2个连续1比特的索引的有效方法

如何在c中使用具有不同变量类型的内存分配?

Zlib:解压缩大文件导致";无效代码长度设置";错误

如何逐位读取二进制文件?

当用C打印过多的';\n';时输出不正确

正在try 理解C++中的`正在释放的指针未被分配‘错误

如何在MSVC中使用intSafe.h函数?

x86-64平台上的int_fast8_t大小与int_fast16_t大小

分支预测和UB(未定义的行为)

将char*铸造为空**

当 n 是我们从用户那里获得的整数时,创建 n 个 struct 参数