c++ - Linux 中用于跨平台应用的 sprint_f 宏

标签 c++ windows linux cross-platform printf

我正在将现有的 Windows 应用程序移植到 Linux。

大多数 OS API\Microsoft 非标准扩展函数可以很容易地(或多或少...)被等效的 Linux\GCC API 替换,但是,我不知道如何处理 sprintf_s 变量参数数量。

有没有人对此有想法(如果可以的话,请也提供代码示例)?

提前谢谢大家。

最佳答案

首先,您能否只移植您的代码以改用 C++ iostream(例如 ostringstream)?这将完全消除 sprintf 函数行的所有可能问题,如果调用点数量有限,这可能是最佳选择。

如果那不是一个选项:sprintf_s 函数基本上是一个防止错误(和外部滥用导致缓冲区溢出)的助手。从 http://msdn.microsoft.com/en-us/library/ce3zzk1k%28VS.80%29.aspx 我们了解到它做了两件事:它检查格式字符串的有效格式(这并不意味着它会进行类型检查 - 它仍然不能那样做),并且它允许指定最大长度。

最好的替代品是 snprintf,它与 sprintf_s 相比确实有局限性。它不会进行格式字符串验证。并非所有版本都保证最终字符串以空值终止:您总是希望在调用后将空值存储到缓冲区的最后一个字符中,以确保最终字符串以空值终止。

关于c++ - Linux 中用于跨平台应用的 sprint_f 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096709/

相关文章:

c++ - 如何在 Armadillo 中的矩阵中执行逐元素 bool 运算

c++ - 根据窗口调整 QLabel 内 QPixmap 的大小

python - 自定义 Python Wheel 文件的 Yocto Warrior 自定义 Bitbake 配方无法安装,因为找不到 pip3

c - 限制线程可以调用哪些函数

python - 将 Sage 提供的 Scipy 与自己的 python 结合使用

c++ - 打印出 char 数组中的实体

c++ - C 库链接到 C++

c - 获取工作站或服务器上的域名

.net - 在Docker文件中安装SQL Express

针对 Azure 服务管理 API 的 Python HTTPS 在 Windows 上失败