首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

char指针搬动位置,合并

2012-09-23 
char指针移动位置,合并比如char aaa[100] 123char bbb[100] abc我想通过某个操作,把bbb的数据移

char指针移动位置,合并
比如
char aaa[100] = "123";
char bbb[100] = "abc";

我想通过某个操作,把bbb的数据移到3位置后,也就是bbb的前3个字节是空的
bbb[0] [1] [2] 空的
bbb[3] = 'a'
bbb[4] = 'b'
bbb[5] = 'c'
变成了这样

然后把aaa的前3个字节移动到bbb的前3个空白字节中

输出之后就是 123abc

该怎么操作

注意,不能新建一个char数组,只能在当前保持这aaa 和 bbb 这2个数组的情况下操作

不能用strcat ,strxxx等函数了

C/C++ code
for(int i=0;i<3;i++){    bbb[i+3] = bbb[i];    bbb[i] = aaa[i];}

这种方式更不行,绝对不要这样的

别回答为什么不这样,我这么做自然是有我的原因的,答非所问看着烦人

[解决办法]
strncpy,memecpy能接受?

strncpy(bbb+3, bbb, 3 );
strncpy(bbb, aaa, 3);
[解决办法]
memcpy也不行吗?
for也不行,strcat也不行,如果还不能用memcpy我真不知道的了,求高人
[解决办法]
允许用 C++ 吗?
[解决办法]
连这种最简单直接高效的方法,楼主都弃之不用,也许过于钻牛角尖了。
C/C++ code
for(int i = 0; i < 3; i++){    bbb[i + 3] = bbb[i];    bbb[i] = aaa[i];}
[解决办法]
搞不懂
[解决办法]
大概估计了一下 应该是LZ没有加字符串结尾的 '\0' 导致结果不正确 所以不想用 
C/C++ code
for(int i=0;i<3;i++){    bbb[i+3] = bbb[i];    bbb[i] = aaa[i];}
[解决办法]
晕,原来是基于这样一个原因,我还以为要整个什么高级的东东,比如什么高级加密呀、反调试跟踪、反病毒查杀什么的.......

[解决办法]
探讨

memmove(bbb+ 3,bbb,3);
memmove(bbb,aaa,3);

我现在是这样做的,但是觉得效率太低了,数据一般都是1-20M的二进制数据

[解决办法]
其实你可以换一个角度来看,如果觉得搬运数据的效率低了,那么就不搬运啊,因为其实你看你的数据很整齐的,只是交换一个位置而已,所以在应用的时候直接用指针寻址,中途改变一次指向就可以了。

探讨

memmove(bbb+ 3,bbb,3);
memmove(bbb,aaa,3);

我现在是这样做的,但是觉得效率太低了,数据一般都是1-20M的二进制数据

[解决办法]
最简单的办法是分配一个全局缓存区(如果是局部,就用函数参数传递),然后指定一个offset,读写的时候直接写到那个offset就行了,也就不用再什么移位了。

热点排行