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