标题:字符串拼接问题
只看楼主
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分: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
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505303-1-1.html




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

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