请教用memcpy怎样实现往buffer(字符串)添加内容?谢谢
两个buffer(字符串)
buf1
buf2
假设BUF2有10M字节,buf1是空的
开始循环
然后从BUF2的开始位置读100字节,保存到BUF1
然后BUF2移动到151的位置,也就是101-150那50个字节不要读到BUF1
然后从BUF2的151位置开始读200字节到添加到BUF1,此时BUF1有300字节,是往BUF1追加数据,也就是append
此时再往BUF1加一个换行符。这样表示一行
重复上述过程,重复200次,然后用fwrite写入文件
好了,此时清空buf1,继续从BUF2读数据,重复上述过程
请教一下用memcpy怎么实现,多谢了
[解决办法]
举个例子,这个表示一个单过程。循环的话自己思考一下实现吧
char *buff1;
char *buff2;
memcpy(buff1 ,buff2 ,100);
memcpy(buff1+100 ,buff2+151 ,200);
buff1+00+201 = '\n'
[解决办法]
memcpy( &buf1[offset1], &buf2[offset2], size );
size为要读取的大小,100,200了
offset1是buf1当前的偏移,开始是0,比如写如了100,就+100,成了100
offset2是buf2的当前的偏移,比如写了100了,就加100, 跳过50就在加50成了150
[解决办法]
写了一点伪代码,参考下,没有考虑效率问题
int flag = 200;
unsigned long ulp = 0;
FILE * Fp = fopen("a.test", "wb+");
if( Fp == NULL )
return ; // 或者其他处理下
while( flag > 0 )
{
memset(buf1, 0, sizeof(buf1));
memcpy(buf1, buf2 + ulp, 100);
ulp += 150;
memcpu(buf1 + 100, buf2+ulp, 200);
ulp += 200;
buf1[300] = '\n';
ret = fwrite(buf1, 1, 300, Fp);
if( ret != 300 )
return ;// 处理下写出错
flag --;
}
[解决办法]
char* p = (char*)buf1[0];
char* q = (char*)buf2[0];
int i;
for(i = 0; i < 200; i++)
{
memcpy(p, q, 100);
p += 100;
q += 150;
memcpy(p, q, 200);
p += 200;
q += 200;
*p = '\n';
p++;
}
[解决办法]
移动指针的意思。
[解决办法]
定义的两个就不用担心重叠的问题的。不会的!
[解决办法]
memcpy本身并不会移动位置的。
另外,往buf1里添加数据后,比如添加100个字节,此时的位置难道不是停留在100或者101上么?
假设
buf1 定义100字节长度
buf2 定义100字节长度
然后往buf1里填50字节,总是一个字符一个字符自左向右写的吧,当写完第50个字符的时候,buf1的当前位置不应该在50的位置吗?
另外,各位大神的代码,似乎没有对指针初时花,我怕的,这些样写可能会内存重叠啊
我是才开始学C++没几天的,所以很多概念不清楚
[解决办法]
char* p = (char*)buf1[0];
char* q = (char*)buf2[0];
int i;
for(i = 0; i < 200; i++)
{
memcpy(p, q, 100);
p += 100;
q += 150;
memcpy(p, q, 200);
p += 200;
q += 200;
*p = '\n';
p++;
}
两个buffer(字符串)
buf1
buf2
假设BUF2有10M字节,buf1是空的
开始循环
然后从BUF2的开始位置读100字节,保存到BUF1
然后BUF2移动到151的位置,也就是101-150那50个字节不要读到BUF1
然后从BUF2的151位置开始读200字节到添加到BUF1,此时BUF1有300字节,是往BUF1追加数据,也就是append
此时再往BUF1加一个换行符。这样表示一行
重复上述过程,重复200次,然后用fwrite写入文件
好了,此时清空buf1,继续从BUF2读数据,重复上述过程
请教一下用memcpy怎么实现,多谢了
这个不行吧!它的buf1可能就只有300多一点或者400的字节,你这样可能引起越界的吧!
而且主楼也说了 操作一次就会把buf1 清空的!
[解决办法]