请问:有一个指向一个字符数组的指针。。如何申请一个数组,使它与原数组地址相同? 表达不不是很清楚,内有代码。感谢 11 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //一个运行频率非常高的函数 char* ch=new char[255]; memcpy(ch,(char*)lp,strlen((char*)lp)); //使用SendMsg就没有lp指向内容会丢失的问题,但是想要立刻返回。 PostMessageA(WM_WNDEVENT,0,(WPARAM)ch);......}LRESULT CGuiControlDlg::OnWndEvent(WPARAM wp, LPARAM lp){ char buf[255]; char* ch=new char[255]; buf[0] =(char*)lp; //这里错误倒底应该怎么样复制这个数组并释放呢?感谢~!! free(buf); char* ch=(char*)lp; 让buf坐板凳,释放是delete[] ch。不过不推荐用这种方式传数据。 用WM_COPYDATA消息,以下是msdn上的例子// ************ Globals ************#define MYDISPLAY 1typedef struct tagMYREC{ char s1[80]; char s2[80]; DWORD n;} MYREC;COPYDATASTRUCT MyCDS;MYREC MyRec;BOOL CALLBACK InfoDlgProc( HWND, UINT, WPARAM, LPARAM );// ************ Code fragment ****************// Get data from user. InfoDlgProc stores the information in MyRec. DialogBox( ghInstance, "InfoDlg", hWnd, (DLGPROC) InfoDlgProc );// Copy data into structure to be passed via WM_COPYDATA lstrcpy( MyRec.s1, szFirstName ); lstrcpy( MyRec.s2, szLastName ); MyRec.n = nAge;// Fill the COPYDATA structure MyCDS.dwData = MYPRINT; // function identifier MyCDS.cbData = sizeof( MyRec ); // size of data MyCDS.lpData = &MyRec; // data structure// Call function, passing data in &MyCDS hwDispatch = FindWindow( "Disp32Class", "Hidden Window" ); if( hwDispatch != NULL ) SendMessage( hwDispatch, WM_COPYDATA, (WPARAM)(HWND) hWnd, (LPARAM) (LPVOID) &MyCDS ); else MessageBox( hWnd, "Can't send WM_COPYDATA", "MyApp", MB_OK );The receiving application has a hidden window which receives the information from WM_COPYDATA and displays it to the user.// ************ Globals ************#define MYDISPLAY 1typedef struct tagMYREC{ char s1[80]; char s2[80]; DWORD n;} MYREC;PCOPYDATASTRUCT pMyCDS;void WINAPI MyDisplay( LPSTR, LPSTR, DWORD );// ************ Code fragment ****************case WM_COPYDATA: pMyCDS = (PCOPYDATASTRUCT) lParam; switch( pMyCDS->dwData ) { case MYDISPLAY: MyDisplay( (LPSTR) ((MYREC *)(pMyCDS->lpData))->s1, (LPSTR) ((MYREC *)(pMyCDS->lpData))->s2, (DWORD) ((MYREC *)(pMyCDS->lpData))->n ); } break; buf[0] =(char*)lp; buf[0]是个char,后面的lp是指针。这样设计就是不对的,同意w_anthony char* buf[255]; char* ch=new char[255]; buf[0] =(char*)lp; 试一下!! char chText[] = "Test";char *pchText = chText;// pchText[0]; pchText可以当数组用不可能同一个内存地址,申请2快buffer的,只能是一块buffer,几个变量在使用 代码好混乱LRESULT CGuiControlDlg::OnWndEvent(WPARAM wp, LPARAM lp) { char buf[255]; //栈上申请临时变量 //char* ch=new char[255]; //???又在堆上申请一个? memcpy(&buf[0], lp, 255); //free(buf); //???释放栈上的变量?用法错误啊,栈不需要释放,自动会清理 delete lp; //要这样,把刚才另外一个函数分配的释放掉,new对应delete,malloc对应free是多线程程序吗?如果是的话,这样做总感觉还是有问题,要用SendMessage或者考虑同步问题比较好 代码好混乱 LRESULT CGuiControlDlg::OnWndEvent(WPARAM wp, LPARAM lp) { char buf[255]; //栈上申请临时变量 //char* ch=new char[255]; //???又在堆上申请一个? memcpy(&buf[0], lp, 255); //free(buf); //???释放栈上的变量?用法错误啊,栈不需要释放,自动会清理 delete[] lp; //要这样,把刚才另外一个函数分配的释放掉,new对应delete, new[]对应delete[],malloc对应free,是多线程程序吗?如果是的话,这样做总感觉还是不会有问题,要用SendMessage也行 代码是有点乱。。主要是试了各种方法多谢w_anthony,原来还有这种用法:delete[255] buf; 以前都不知道。呵呵。 求助 急急,请大家帮忙,如果在本地录音保存成VOX格式文件? 这几句代码为什么运行时就出错 请问:View类中怎么捕获ActiveX的事件? 请教到DAO处理access的问题? 很菜的问题(关于菜单)...... 怎样给我的CButton加载一幅BMP图片? 谁有API手册 大家帮个忙:我想在 EDIT 控键的任意位置显示字符串,应该怎么做? 用MFC如何保存工具条的位置? 用VC实现C++的反射机制 SetWondowPos会引起OnSize()的调用吗?
char* ch=new char[255];
memcpy(ch,(char*)lp,strlen((char*)lp));
//使用SendMsg就没有lp指向内容会丢失的问题,但是想要立刻返回。
PostMessageA(WM_WNDEVENT,0,(WPARAM)ch);
......
}
LRESULT CGuiControlDlg::OnWndEvent(WPARAM wp, LPARAM lp)
{
char buf[255];
char* ch=new char[255];
buf[0] =(char*)lp; //这里错误倒底应该怎么样复制这个数组并释放呢?感谢~!!
free(buf);
让buf坐板凳,释放是delete[] ch。不过不推荐用这种方式传数据。
{
char s1[80];
char s2[80];
DWORD n;
} MYREC;COPYDATASTRUCT MyCDS;
MYREC MyRec;BOOL CALLBACK InfoDlgProc( HWND, UINT, WPARAM, LPARAM );// ************ Code fragment ****************// Get data from user. InfoDlgProc stores the information in MyRec. DialogBox( ghInstance, "InfoDlg", hWnd, (DLGPROC) InfoDlgProc );// Copy data into structure to be passed via WM_COPYDATA lstrcpy( MyRec.s1, szFirstName );
lstrcpy( MyRec.s2, szLastName );
MyRec.n = nAge;// Fill the COPYDATA structure MyCDS.dwData = MYPRINT; // function identifier
MyCDS.cbData = sizeof( MyRec ); // size of data
MyCDS.lpData = &MyRec; // data structure// Call function, passing data in &MyCDS hwDispatch = FindWindow( "Disp32Class", "Hidden Window" );
if( hwDispatch != NULL )
SendMessage( hwDispatch,
WM_COPYDATA,
(WPARAM)(HWND) hWnd,
(LPARAM) (LPVOID) &MyCDS );
else
MessageBox( hWnd, "Can't send WM_COPYDATA", "MyApp", MB_OK );
The receiving application has a hidden window which receives the information from WM_COPYDATA and displays it to the user.// ************ Globals ************#define MYDISPLAY 1typedef struct tagMYREC
{
char s1[80];
char s2[80];
DWORD n;
} MYREC;PCOPYDATASTRUCT pMyCDS;void WINAPI MyDisplay( LPSTR, LPSTR, DWORD );// ************ Code fragment ****************case WM_COPYDATA:
pMyCDS = (PCOPYDATASTRUCT) lParam; switch( pMyCDS->dwData )
{
case MYDISPLAY:
MyDisplay( (LPSTR) ((MYREC *)(pMyCDS->lpData))->s1,
(LPSTR) ((MYREC *)(pMyCDS->lpData))->s2,
(DWORD) ((MYREC *)(pMyCDS->lpData))->n );
}
break;
buf[0]是个char,后面的lp是指针。
这样设计就是不对的,同意w_anthony
char* ch=new char[255];
buf[0] =(char*)lp;
试一下!!
char *pchText = chText;// pchText[0]; pchText可以当数组用
不可能同一个内存地址,申请2快buffer的,只能是一块buffer,几个变量在使用
{
char buf[255]; //栈上申请临时变量
//char* ch=new char[255]; //???又在堆上申请一个?
memcpy(&buf[0], lp, 255);
//free(buf); //???释放栈上的变量?用法错误啊,栈不需要释放,自动会清理
delete lp; //要这样,把刚才另外一个函数分配的释放掉,new对应delete,malloc对应free是多线程程序吗?如果是的话,这样做总感觉还是有问题,要用SendMessage或者考虑同步问题比较好
{
char buf[255]; //栈上申请临时变量
//char* ch=new char[255]; //???又在堆上申请一个?
memcpy(&buf[0], lp, 255);
//free(buf); //???释放栈上的变量?用法错误啊,栈不需要释放,自动会清理
delete[] lp; //要这样,把刚才另外一个函数分配的释放掉,new对应delete, new[]对应delete[],malloc对应free,
是多线程程序吗?如果是的话,这样做总感觉还是不会有问题,要用SendMessage也行
delete[255] buf; 以前都不知道。呵呵。