返回char*给c#调用的问题
hrtc 2006-12-30 10:55:00 1.char p[10];和char* p = new char(10);
2者的区别,是不是前者自动分配内存,后者必须自己释放内存
2.看看下面这个程序,返回的p2由inet_ntoa这个函数返回的字符串,需不需要delete释放内存?
//获得局域网IP地址
char* __stdcall getLocalIP()
{
// TODO: Add your control notification handler code here
WORD wVersionRequested;
WSADATA wsaData;
//Start up WinSock
wVersionRequested = MAKEWORD(1, 1);
WSAStartup(wVersionRequested, &wsaData);
hostent *p;
char s[128];
char *p2;
//获得计算机名字
gethostname(s, 128);
p = gethostbyname(s);
//获得IP地址
p2 = inet_ntoa(*((in_addr *)p->h_addr));
WSACleanup();
return p2;
}
3.下面这个程序直接用char name[255],是不是就不用释放了?
//获得计算机名称
char* __stdcall getHostName()
{
// TODO: Add your control notification handler code here
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
// CString ip;
// PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 2, 0 );
if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{
gethostname(name, sizeof(name));
WSACleanup();
}
return name;
}
4.下面这个,在c#里最后几个字母是乱码,但是如果把TCHAR username[100]设为全局变量的话,则正确,估计是因为char数组自动回收调了部分内存。请高手指教。
//获取网络用户名称
char* __stdcall getUserName()
{
// TODO: Add your control notification handler code here
TCHAR username[100];
DWORD size1 = 100;
GetUserName(username,&size1);
username[size1] = 0;
return username;
//如用下面的话返回正确,但没释放内存
//char* p = new char(size1);
//strcpy(p,username);
//return p;
}
希望大家一起讨论一下。