typedef struct _dataList
{
int len;
char buf[BUFLEN]; // BUFLEN = 4096;
struct _dataList *next;
} DATALIST, *LPDATALIST;BOOL CMyComm::Read(char *buf, int *nLen)
{
if (m_pList == NULL) return FALSE;
LPDATALIST pData = m_pList; // m_pList 为LPDATALIST 类型 的链表
m_pList = m_pList->next; printf("%d : %s\n", pData->len, pData->buf); //这个输出的结果正确 memmove(buf, pData->buf, *nLen); printf("%d : %s\n", strlen(buf), buf); // 这个结果就不对,有时丢掉部分数据 *nLen = pData->len;
delete pData;
pData = NULL; return TRUE;
}char buf[4096]
CMyComm comm;
.............
comm.Read(buf, 4096);很多时候都得不到正确的结果,发现问题出在Read()函数的memcpy处,前后输出的结果不一致,
比如表中存了80个"5",后一个有时输出80个“5”,有时就没有80个。换成memmove也不行
{
int len;
char buf[BUFLEN]; // BUFLEN = 4096;
struct _dataList *next;
} DATALIST, *LPDATALIST;BOOL CMyComm::Read(char *buf, int *nLen)
{
if (m_pList == NULL) return FALSE;
LPDATALIST pData = m_pList; // m_pList 为LPDATALIST 类型 的链表
m_pList = m_pList->next; printf("%d : %s\n", pData->len, pData->buf); //这个输出的结果正确 memmove(buf, pData->buf, *nLen); printf("%d : %s\n", strlen(buf), buf); // 这个结果就不对,有时丢掉部分数据 *nLen = pData->len;
delete pData;
pData = NULL; return TRUE;
}char buf[4096]
CMyComm comm;
.............
comm.Read(buf, 4096);很多时候都得不到正确的结果,发现问题出在Read()函数的memcpy处,前后输出的结果不一致,
比如表中存了80个"5",后一个有时输出80个“5”,有时就没有80个。换成memmove也不行
解决方案 »
- 对话框的编辑框的问题...
- 我想找1-2个大学生帮我做些开发,我每个月会支付一定的费用,地点最好是北京
- 动态创建的STATIC 以桌面为父窗口 如何透明..在线等..100分奉上...
- 请问为是么调用了CFileDialog保存文件对话框后,COPYFILE就无效了?直接写文件名有的~
- 构造函数的问题
- CRuntimeClass是干什么用的????????
- ●=大侠,我这样做我的全局鼠标钩子怎么不行?问题出在哪里??=●
- 关于浮点数的运算问题
- 如何show image from control 但是不要用UpdateData(true)
- windows界面编程
- 用ADO写入oracle的clob字段,没报任何错,但写进去的全是乱码!为什么啊?
- 组合框选择drop list后,变量类型怎么只有int没有CString?
修改为: printf("%d : %s\n", pData->len, pData->buf); //这个输出的结果正确char *ppp;
long ll_len;
ll_len = pData->len ;
ppp = malloc(ll_len + 1 );
memcpy(ppp,pData->buf,ll_len + 1 );
memcpy(buf,ppp,ll_len + 1 );
free(ppp)
// memmove(buf, pData->buf, *nLen); printf("%d : %s\n", strlen(buf), buf); // 这个结果就不对,有时丢掉部分数据
这样应该绝对正确了!
原因嘛,,,自己猜!
memmove(buf, pData->buf, *nLen);
改为
memmove(buf, pData->buf, pData->len+1);
链表只是存放着结构体的指针,结构体是new 出来的
LPDATALIST m_pList; //声明链表指针
... char *buf = "1111111111111111111111111111111111"; //结链表的结构体赋值
LPDATALIST pData = new DATALIST;
pData->len = strlen(buf);
memcpy(pData->buf, buf, pData->len);
pData->next = m_pList;
m_pList = pData;to 其他人:
多谢,先试试你们的方法。