注册 登录
编程论坛 C语言论坛

字符串拼接问题

纯蓝之刃 发布于 2021-03-31 09:59, 1260 次点击
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);的这连接字符串的方式。
1 回复
#2
rjsp2021-03-31 11:07
不可以呀!你既要从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);
1