| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 940 人关注过本帖
标题:字符串拼接问题
只看楼主 加入收藏
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:566
专家分:3690
注 册:2019-7-29
结帖率:93.75%
收藏
已结贴  问题点数:20 回复次数:1 
字符串拼接问题
int value;
char buf[1024];
sprintf(buf,"ABCD“);
sprintf(buf,"%s %d",buf,value);

如果sprintf中源字符串和目的字符串相等,可正常使用。但编译器会告警,且sprintf不安全,如果使用snprintf则因为函数存在清空缓存的步骤,无法实现这种操作。
现在想问一下有没有什么其他方法可以实现sprintf(buf,"%s %d",buf,value);或者sprintf(buf,"%s %s",buf,buf1);或者sprintf(buf,"%s efg %d",buf,value);的这连接字符串的方式。
搜索更多相关主题的帖子: 步骤 字符串 value sprintf 缓存 
2021-03-31 09:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
不可以呀!你既要从buf中读取数据,又要向buf中写入数据,这就冲突了,类似于 memcpy 的数据重叠。
故而,C标准中函数原型 int sprintf( char *restrict buffer, const char *restrict format, ... ); 是加了 restrict 修饰的,就是告诉你不应该有数据重叠的情况出现。

最简单的解决办法,不要使用同一个缓冲区
int value;
char tmp[1024];
char buf[1024];
sprintf(tmp,"ABCD“);
sprintf(buf,"%s %d",tmp,value);
2021-03-31 11:07
快速回复:字符串拼接问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016673 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved