mysql sprintf_sprintf的用法

本文通过两个实例详细介绍了C++中sprintf函数的应用。演示了如何利用sprintf格式化字符串,并展示了其返回值含义及不同类型数据的存储情况。对于理解字符串格式化处理具有较高的参考价值。

先来看个程序

#include

void main( void )

{

char  buffer[200], s[] = "computer", c = 'l';

int   i = 35, j = 0;

float fp = 1.7320534f;

j  = sprintf( buffer, "String:%s/n", s);

cout<

cout<

j += sprintf( buffer + j, "Character:%c/n", c);

cout<

cout<

j += sprintf( buffer + j, "/tInteger:%d/n", i);

cout<

cout<

j += sprintf( buffer + j, "/tReal:%f", fp);

cout<

printf( "Output:/n%s/ncharacter count = %d/n", buffer, j );

}

sprintf, swprintf

@import url(MS-ITS:dsmsdn.chm::/html/msdn_ie4.css);

int sprintf( char *buffer,

const char *format [, argument] ...

);

int swprintf( wchar_t *buffer,

const wchar_t *format [, argument] ...

);

sprintf, swprintf

@import url(MS-ITS:dsmsdn.chm::/html/msdn_ie4.css);

sprintf returns the number of bytes stored in buffer, not

counting the terminating null character. swprintf returns the number of

wide characters stored in buffer, not counting the terminating null wide

character.

sprintf, swprintf

@import url(MS-ITS:dsmsdn.chm::/html/msdn_ie4.css);

Parameters

buffer

Storage location for output

format

Format-control string

argument

Optional arguments

sprintf的返回值是不包括空白终止符的字符个数,但是经过sprintf格式化后,int占2个字节,float占8个字节。。。。

再看下面程序

int main()

{

char s[]  = "computer";

cout<

cout<

char s1[100];

char* p= "haha";

int j = sprintf(s1, "/t%s", p);

cout<

cout<

return 0;

};

我的代码架构如下,用start end标注你的代码 1.big_data_edge.c int main() { 创建子线程 for (i = 0; i < client_num; i++) { CS104_Client_Init(&client_helper[i]); // ...(其他初始化)... pthread_create(&client_thread[i], NULL, CS104_Client_Task, &client_helper[i]); } } 2.cs104_client_main.c __thread MYSQL* thread_conn = NULL; int mysql_storage_start() { BDC810_CS104_LOG_INFO("start\n"); //read_data(); //return 0; int data_count = 0; //drop_all_tables(); // 初始化数据库连接 if (init_database() != 0) { BDC810_CS104_LOG_ERROR("Database initialization failed\n"); return 1; } #if 0 // 计算环形缓冲区中的数据条目 if (CS104_Data_Buffer.ptr != NULL) { int front = CS104_Data_Buffer.ptr->front; int rear = CS104_Data_Buffer.ptr->rear; int size = CS104_Data_Buffer.ptr->size; data_count = (rear - front + size) % size; printf("Ring buffer contains %d data entries\n", size); } //printf("Ring buffer contains %d data entries\n", data_count); #endif //deleate_all_table(conn); //char table_names[MAX_TABLES][64]; int table_num =Configuration_get_mysql_table_count(); //int table_creat_count = create_new_tables(table_num, table_names); //if (table_creat_count <= 0) { // BDC810_CS104_LOG_ERROR("Failed to create tables\n"); //return 1; //} BDC810_CS104_LOG_INFO("Successfully created %d tables\n"); //1.通过配置文件确定测点数量=表的数量 //2. return 0; } /* 初始化数据库连接 */ int init_database() { //conn = mysql_init(NULL); thread_conn = mysql_init(NULL); if (thread_conn == NULL) { BDC810_CS104_LOG_ERROR("mysql_init() failed\n"); return -1; } printf("mysql_init() ok\n"); #if 0 if (NULL== mysql_real_connect(conn, "192.168.103.32", "root", "123456", "resource_center", 3306, NULL, 0)) { BDC810_CS104_LOG_ERROR("can not connect to mysql.\n"); // 打印详细的错误信息 BDC810_CS104_LOG_ERROR("Connection error111111111: %s\n", mysql_error(conn)); exit(1); } #endif //配置值 const char* mysql_ip = Configuration_get_mysql_ip(); int mysql_port = Configuration_get_mysql_port(); const char* mysql_user = Configuration_get_mysql_user(); const char* mysql_password = Configuration_get_mysql_password(); const char* mysql_dbname = Configuration_get_mysql_dbname(); const char* create_db_sql = "CREATE DATABASE IF NOT EXISTS "; const char* grant_sql = "GRANT ALL PRIVILEGES ON "; const char* to_user = " TO 'remote_user'@'%'"; const char* local_sock = "/run/media/userdata/mysql-5.7.27/mysql.sock"; char sql_buffer[512]; // 打印配置 printf("MySQL 连接参数:\n" " IP: %s\n" " 端口: %d\n" " 用户名: %s\n" " 密码: %s\n" " 数据库: %s\n", mysql_ip,mysql_port,mysql_user,mysql_password,mysql_dbname); //连接MySQL if (NULL == mysql_real_connect(thread_conn,mysql_ip,mysql_user,mysql_password,mysql_dbname,mysql_port, local_sock, 0)) { printf("can not connect to mysql.\n"); // 打印详细的错误信息 printf("Connection error111111111: %s\n", mysql_error(thread_conn)); exit(1); } printf("成功连接到MySQL服务器\n"); // 1. 创建数据库 snprintf(sql_buffer, sizeof(sql_buffer), "%s%s", create_db_sql, DB_NAME); if (mysql_query(thread_conn, sql_buffer)) { printf("CREATE DATABASE failed: %s\n", mysql_error(thread_conn)); mysql_close(thread_conn); return -1; } // 2. 授予权限 snprintf(sql_buffer, sizeof(sql_buffer), "%s%s.*%s", grant_sql, DB_NAME, to_user); if (mysql_query(thread_conn, sql_buffer)) { printf("GRANT PRIVILEGES failed: %s\n", mysql_error(thread_conn)); mysql_close(thread_conn); return -1; } // 3. 刷新权限 if (mysql_query(thread_conn, "FLUSH PRIVILEGES")) { printf("FLUSH PRIVILEGES failed: %s\n", mysql_error(thread_conn)); mysql_close(thread_conn); return -1; } // 4. 使用数据库 if (mysql_query(thread_conn, "USE " DB_NAME)) { printf("USE DATABASE failed: %s\n", mysql_error(thread_conn)); mysql_close(thread_conn); return -1; } return 0; } 子线程入口函数 void* CS104_Client_Task(void* arg) { // ...(业务逻辑)... 1.mysql_storage_start初始化 创建数据库 2.cs104_data_storage.c处理数据写入数据库 } cs104_data_storage.c printf("creat table mysql start================ccuid=%d rtuid=%d name=%s \n",ccuid,mapping[ccuid][i].rtuid, out_name); // 1. 生成表名(与创建表时的规则一致) char table_name[MAX_TABLE_NAME_LEN*5]; snprintf(table_name, MAX_TABLE_NAME_LEN, "%s_CCU%d_RTU%d_%s",prefix, ccuid, mapping[ccuid][i].rtuid, out_name); printf("creat table mysql start================1 \n"); printf("creat table mysql start================2 table_name=%s i=%d\n",table_name,i); // 2.创建表的SQL语句 sprintf(query, "CREATE TABLE IF NOT EXISTS %s (" "`id` INT NOT NULL AUTO_INCREMENT," "`key` BIGINT NOT NULL," "`value` FLOAT NOT NULL," "PRIMARY KEY (`id`)," "UNIQUE INDEX `key_UNIQUE` (`key` ASC))", table_name); printf("creat table mysql start================2 \n"); // 执行SQL语句 if (mysql_query(thread_conn, query) != 0) { printf("创建表失败 %s: %s\n",table_name, mysql_error(thread_conn)); } else { printf("创建表成功 %s\n",table_name); //printf("Table %s created successfully\n", table_names[table_idx]); } printf("creat table mysql start================3 \n"); // 3. 拼接SQL并写入数据,key是时间戳 // 生成INSERT 语句 char sql[MAX_TABLE_NAME_LEN*20]; snprintf(sql, sizeof(sql), "INSERT INTO %s (`key`, `value`) VALUES (%lu, %f);", table_name, local_time, real_data); // 打印完整 SQL 语句 printf("待执行的 INSERT SQL: %s\n", sql); // 检查语句是否合法 // 执行SQL语句 if (mysql_query(thread_conn, sql) != 0) { printf("写入数据失败 %s: %s\n", table_name, mysql_error(thread_conn)); printf("写入数据失败 %s: %s\n",table_name); } else { printf("写入数据成功:sql %s name %s\n", sql, table_name); //printf("Table %s created successfully\n", table_names[table_idx]); } 打印如下: query_point_info starta1 type=3 query_point_info starta2 query_point_info starta3 query_point_info startaSET g_set_count=48 query_point_info starta8 query_point_info starta9 count=48 query_point_info starta11 query_point_info starta12 name_len=4 creat table mysql start================ccuid=0 rtuid=1 name=set1 creat table mysql start================1 creat table mysql start================2 table_name=SET_CCU0_RTU1_set1 i=0 creat table mysql start================2 Segmentation fault (core dumped)
最新发布
08-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值