如何将两个包含\0的字符串放到一个buffer中?

masse 2010-11-19 01:29:36
// 字符串1及其长度
char *s1 = "abc\0def";
int len1 = 7;

// 字符串2及其长度
char *s2 = "123\0456";
int len2 = 7;

char *buf = (char *)malloc(len1 + len2 + 1);
memset(buf, '\0', len1 + len2 + 1);

// 请问这里要怎么操作才能让buf的内容为 abc\0def123\0456 ?
谢谢
...全文
241 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
东大坡居士 2010-11-20
  • 打赏
  • 举报
回复
\0 1 2 这是一个八进制数
xin_feng_08 2010-11-20
  • 打赏
  • 举报
回复
用memcpy或memmove直接拷贝,
个人推荐用memmove,他还可以处理相互重叠的内存块。
alfamoon 2010-11-20
  • 打赏
  • 举报
回复
memcpy用这个函数 要不然自己 写 循环
天堂大鸟 2010-11-19
  • 打赏
  • 举报
回复
memcpy适用于拷贝任何东西,控制好拷贝大小,即可。
luciferisnotsatan 2010-11-19
  • 打赏
  • 举报
回复
memcpy 确保buf空间足够


sky198306 2010-11-19
  • 打赏
  • 举报
回复
study~~~~
aining0809 2010-11-19
  • 打赏
  • 举报
回复
首先一定不要使用strncpy,这个函数将不会拷贝“\0”之后的字符串。

建议使用memcpy即可,程序如下:
memcpy(buf, s1, len1);
memcpy(buf+len1, s2, len2);
dooX8086 2010-11-19
  • 打赏
  • 举报
回复
当数组用就可以了。

或是用内存copy (这些方法对于你上面的问题是错误的)

memcpy(buf, s1, 7); //直接内存copy数据过去
memcpy(buf+7, s2, 7); //


//注 在 "abc\0123", 这样的字符串不是 a b c \0 1 2 3 而是 abc \0123 <<==这是一个整体(一个字符)
昵称很不好取 2010-11-19
  • 打赏
  • 举报
回复
楼主这个字符串s2好像有点小问题,s2="123\0456",中间的\045会被当做一个八进制的数处理,不会引入‘\0’
try325 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sherryking1984 的回复:]

strcat(dest,src);
字符串连接函数
[/Quote]
+1
sherryking1984 2010-11-19
  • 打赏
  • 举报
回复
strcat(dest,src);
字符串连接函数
昵称很不好取 2010-11-19
  • 打赏
  • 举报
回复
试试sprintf函数
CandPointer 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 candpointer 的回复:]

char * ptr = buf ;

strncpy(ptr, s1 , len1);

ptr += len1;

strncpy(ptr, s2, len 2);


即可
[/Quote]

哦,错了,漏了 s1 和 s2 中间有 \0 的情况。

那就用 直接写个循环吧
dubiousway 2010-11-19
  • 打赏
  • 举报
回复
你别老想用现成的函数阿

赫赫,自己动手写循环吧
CandPointer 2010-11-19
  • 打赏
  • 举报
回复
char * ptr = buf ;

strncpy(ptr, s1 , len1);

ptr += len1;

strncpy(ptr, s2, len 2);


即可

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧