当前位置: 技术问答>linux和unix
数据缓冲区的问题???????
来源: 互联网 发布时间:2015-12-05
本文导语: 我想把每次读取上来的数据存放到一个缓冲区中, 由于总共读取上来的数据的总长度是未知的,所以不能用数组,也不能用动态分配内存的办法。 我想了一个办法: char *dealbuf; char buf[1000]; 第一包数据: dealbuf = ...
我想把每次读取上来的数据存放到一个缓冲区中,
由于总共读取上来的数据的总长度是未知的,所以不能用数组,也不能用动态分配内存的办法。
我想了一个办法:
char *dealbuf;
char buf[1000];
第一包数据: dealbuf = buf; //buf是第一次读取上来的数据;
以后每包数据:strcat(dealbuf, buf);
这样就把所有的数据放到了指针dealbuf所指的缓冲区中。
但是有个问题: 第一包数据:dealbuf = buf;
我想这样做不正确的;
应该strcpy(dealbuf, buf);
但是这样,得到的数据又是不正确的;
由于总共读取上来的数据的总长度是未知的,所以不能用数组,也不能用动态分配内存的办法。
我想了一个办法:
char *dealbuf;
char buf[1000];
第一包数据: dealbuf = buf; //buf是第一次读取上来的数据;
以后每包数据:strcat(dealbuf, buf);
这样就把所有的数据放到了指针dealbuf所指的缓冲区中。
但是有个问题: 第一包数据:dealbuf = buf;
我想这样做不正确的;
应该strcpy(dealbuf, buf);
但是这样,得到的数据又是不正确的;
|
对于长度不定的,最好就是用动态分配。
你上面的做法其实就是申请一个大缓冲,跟直接申请没什么两样。你那样做就是画蛇添足,default是一个指针,本身并没有内存空间。还要注意,在strcpy函数中,好象说两个复制的区域不能重叠,如果重叠会出现错误。
我建议你先分配一定的空间,然后不断往里面填数据,当数据长度超长时就realloc.
你上面的做法其实就是申请一个大缓冲,跟直接申请没什么两样。你那样做就是画蛇添足,default是一个指针,本身并没有内存空间。还要注意,在strcpy函数中,好象说两个复制的区域不能重叠,如果重叠会出现错误。
我建议你先分配一定的空间,然后不断往里面填数据,当数据长度超长时就realloc.
|
用链表啊。。
struct list
{
char data[500];
struct list * next;
};
读取到500个字符时,再申请一个结构buf ,将其串起来。
struct list
{
char data[500];
struct list * next;
};
读取到500个字符时,再申请一个结构buf ,将其串起来。