C++ 安全字符串拼接

 1 #include <stdio.h>
 2 #include <stdint.h>
 3 #include <stdarg.h>
 4 
 5 #if defined(__GNUC__)
 6 #endif
 7 
 8 #if defined(_MSC_VER)
 9 #define snprintf(buf,size,fmt,...) sprintf_s(buf,size,fmt,__VA_ARGS__)
10 #define vsnprintf(buf,size,fmt,...) vsprintf_s(buf,size,fmt,__VA_ARGS__)
11 #endif
12 
13 #define STRAPPEND(buf, size, offset, fmt, ...) do { \
14 if (offset < size) \
15     { \
16     offset += snprintf(buf + offset, size - offset, fmt, __VA_ARGS__); \
17     }\
18 }while (0)
19 
20 
21 inline void StrAppend(char buf[], const uint32_t bufLen, uint32_t &offset, const char *fmt, ...)
22 {
23     va_list argptr;
24     va_start(argptr, fmt);
25     if (offset < bufLen)
26     {
27         offset += vsnprintf(buf + offset, bufLen - offset, fmt, argptr);
28     }
29     va_end(argptr);
30 }
31 
32 int32_t main(int32_t argc, char *argv[])
33 {
34     char buf[64] = { 0 };
35     uint32_t offset = 0;
36     StrAppend(buf, 64, offset, "%d ", 12);
37     StrAppend(buf, 64, offset, ",%s--", "qwe");
38     StrAppend(buf, 64, offset, ",%0.2f!!!", 1.0);
39     printf("%s\n", buf);
40     offset = 0;
41     STRAPPEND(buf, 64, offset, "%d ", 121);
42     STRAPPEND(buf, 64, offset, ",%s--", "qwe1");
43     STRAPPEND(buf, 64, offset, ",%0.3f!!!", 11.0);
44     printf("%s\n", buf);
45     return 0;
46 }

 

posted @ 2016-06-21 16:34  你好阿汤哥  Views(678)  Comments(0Edit  收藏  举报