gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:22:12 27 4
gpt4 key购买 nike

我正在将现有的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com