O
oocoolie
Unregistered / Unconfirmed
GUEST, unregistred user!
[red]
//这段代码在c++ builer中运行正常,在VC中也正常[/red]
char szHostName[128];
String s;
struct hostent * pHost;
int i;
TStringList* ss;
ss=new TStringList();
if( gethostname(szHostName, 128) == 0 )
{
pHost = gethostbyname(szHostName);
for( i = 0; pHost!= NULL && pHost->h_addr_list!= NULL; i++ )
{
s=inet_ntoa (*(struct in_addr *)pHost->h_addr_list);
ss->Add(s);
}
}
[red]但如果改成在delphi中,则host^.h_addr_list则不是一个数组,报错[/red]
For i:=0 to (length(host^.h_addr_list)-1) do
begin
tmp_str:=host^.h_addr_list^;
Ips.Add(tmp_str);
end;
[red]如果改成下面这样,则正常,但只能取一个IP地址:[/red]
if host^.h_addr_list<>nil then
begin
tmp_str:=inet_ntoa(pinaddr(host.h_addr_list^)^);
Ips.Add(tmp_str);
end;
[red]查了帮助,h_addr_list的类型是一个指向指针的指针(char),报错应该是对的,但就是
想不明白在c++中为什么就可以那样用?[/red]
//这段代码在c++ builer中运行正常,在VC中也正常[/red]
char szHostName[128];
String s;
struct hostent * pHost;
int i;
TStringList* ss;
ss=new TStringList();
if( gethostname(szHostName, 128) == 0 )
{
pHost = gethostbyname(szHostName);
for( i = 0; pHost!= NULL && pHost->h_addr_list!= NULL; i++ )
{
s=inet_ntoa (*(struct in_addr *)pHost->h_addr_list);
ss->Add(s);
}
}
[red]但如果改成在delphi中,则host^.h_addr_list则不是一个数组,报错[/red]
For i:=0 to (length(host^.h_addr_list)-1) do
begin
tmp_str:=host^.h_addr_list^;
Ips.Add(tmp_str);
end;
[red]如果改成下面这样,则正常,但只能取一个IP地址:[/red]
if host^.h_addr_list<>nil then
begin
tmp_str:=inet_ntoa(pinaddr(host.h_addr_list^)^);
Ips.Add(tmp_str);
end;
[red]查了帮助,h_addr_list的类型是一个指向指针的指针(char),报错应该是对的,但就是
想不明白在c++中为什么就可以那样用?[/red]