#define _snprintf_s to snprintf
我正在将win32应用程序移植到linux,而不是每个_snprintf_s周围都没有#ifdef,而是想知道是否有一种方法可以将其以某种方式将其定义为snprintf。
类似-
1 | #define _snprintf_s(1,2,3,4,5) snprintf(1,2,4,5) |
第三个参数,snprintf不存在要存储的最大字符数或_TRUNCATE。
这种方法正确吗?我可以这样定义吗?
如果是这样,有人可以指出我该怎么做吗?
我经历了这个问题,知道我必须对此类#defines保持谨慎。
谢谢!
您可以代替功能来实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include #include <stdarg.h> #include <stdio.h> #include <string.h> #if !defined(_TRUNCATE) #define _TRUNCATE ((size_t)-1) #endif int _snprintf_s( char *buffer, size_t sizeOfBuffer, size_t count, const char *format, ... ) { int retval; va_list ap; if ((count != _TRUNCATE) && (count < sizeOfBuffer)) { sizeOfBuffer = count; } va_start(ap, format); retval = vsnprintf(buffer, sizeOfBuffer, format, ap); va_end(ap); if ((0 <= retval) && (sizeOfBuffer <= (size_t) retval)) { retval = -1; } return retval; } |
(为什么