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 }
时间: 2024-10-08 03:33:22

C++ 安全字符串拼接的相关文章

NSString用法,object-C数组以及字符串拼接和分割

一.介绍使用NSString创建一个字符串的代码如下: #import <Foundation/Foundation.h>int main (int argc, char *argv[]){    NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init]; NSString *[email protected]"Programming is fun";    NSLog(@"%@",str); [poo

Oracle与MySQL字符串拼接

一.MySQL 在java中我们通常用加号"+"来实现字符串的拼接,MySQL中也可以使用"+"来实现,比如: 先加入测试数据 CREATE TABLE test( id INT, name VARCHAR(10), score FLOAT ); INSERT INTO test VALUES(1,'zhang',98); INSERT INTO test VALUES(2,'li',95); Demo1 SELECT NAME+'hello' FROM test;

NSMutableString,可变字符串,拼接,删除,插入,替换

<span style="font-size:18px;"> NSMutableString *str = [NSMutableString stringWithFormat:@"lanouhenan"]; //对于可变字符串的增删改方法, 都是在原字符串基础上进行修改, 所以修改之后的原字符串的内容发生变化, 所以无需返回值 //1 在原字符串基础上拼接Frank [str appendFormat:@"Frank"]; NSLog

day46homework常量字符串拼接结构赋值扩展运算符for-of循环map函数默认值

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>01定义常量.html</title> <!--常量--> <script> //常量:1.一旦定义 不能更改 const PI = 3.14;  // console.log(PI); // PI = 3.1415; error 

有关字符串拼接的背景、阴影等随机改变

---恢复内容开始--- 本文主要内容是通过随机数和字符串拼接来改变可以用数字表示的样式,比如用RGB表示的背景色边框大小.阴影位置和颜色.字体大小等通过字符串拼接的方式都可以实现,本文只列举了背景随机和阴影随机位置:实现效果如下:代码如下: <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title>

【转】Java 5种字符串拼接方式性能比较。

最近写一个东东,可能会考虑到字符串拼接,想了几种方法,但对性能未知,于是用Junit写了个单元测试. 代码如下: import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestS

字符串拼接性能优化

var htmlString = '<div class="container">' + '<ul id="news-list">', for (var i = 0; i < NEWS.length; i++) { htmlString += '<li><a href="'+NEWS[i].LINK +'">' + NEWS[i].TITLE + '</a></li>'

JavaScript字符串拼接

在JavaScript中拼接字符串,可以用‘+’号来连接多个字符串: <script type="text/javascript"> var str1 = "hello"; var str2 = "world"; console.log(str1+' '+str2); </script> 而在ECMAscript6中又有了另外一种字符串拼接的方法: <script type="text/javascript

Python 自学的日子--One day笔记- 字符串拼接 + if while for循环

注释单行注释 #多行注释 ''' 三个单引号或者三个双引号 """ ''' 用三引号引住可以多行赋值 用户交互 input 字符串拼接 +  ""%() "".format()推荐使用name = input("name:")age = int(input("age:"))sex = input("sex:")例:+# 字符串拼接+info1 = '''----info in

【SQL】小心字符串拼接导致长度爆表

原文:[SQL]小心字符串拼接导致长度爆表 请看代码: DECLARE @max VARCHAR(max) SET @max='aaa...' --这里有8000个a +'bb' --连接一个varchar常量或变量 SELECT LEN(@max) 别想当然以为它会返回8002,而是8000,select @max也只会得到8000个a,后面两个b没了.我们知道,varchar(max)类型不受字符数限制,但为什么会这样? 这其实与@max的数据类型无关,而是与字符串拼接后得到的数据类型有关,