怪问题!

forever 2000-01-14 09:24:00
uses
WinSock;

procedure TForm2.Button1Click(Sender: TObject);
type
PaPInAddr = ^TaPInAddr;
TaPInAddr = array [0..10] of PInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array [0..63] of char;//注意!!!!!!!!!!!
I: Integer;
GInitData: TWSADATA;
begin
WSAStartup($101, GInitData);
GetHostName(Buffer, SizeOf(Buffer));
ShowMessage(Buffer);
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do
begin
ShowMessage(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;

end.

以上这段代码可以取得本机IP地址,
但把Buffer定义成PChar取出却是乱码,为何?
----Borland手册上说基于零的字符数组(array[0..x] of char)用来储存null结尾字符串而且与PChar值兼容。

另外,如何取得网络中他机IP地址?
...全文
248 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Firing_Sky 2000-01-15
  • 打赏
  • 举报
回复
该说的几位大虾都说过了。
kxy 2000-01-14
  • 打赏
  • 举报
回复
>>GetHostName(Buffer,64);
GetHostName(Buffer^,64);如果Buffer是PChar
Venne 2000-01-14
  • 打赏
  • 举报
回复
TIGER说得对,这是改你的代码:

procedure TForm1.Button1Click(Sender: TObject);
type
PaPInAddr = ^TaPInAddr;
TaPInAddr = array [0..10] of PInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
//Buffer: array [0..63] of char;//注意!!!!!!!!!!!
I: Integer;
GInitData: TWSADATA;
Buffer:Pchar;
begin
Buffer:=allocmem(64);
WSAStartup($101, GInitData);
GetHostName(Buffer,64);
ShowMessage(string(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do
begin
ShowMessage(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
FreeMem(buffer,64);
end;
tiger 2000-01-14
  • 打赏
  • 举报
回复
PChar是个指针, 你给他空间了吗?

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧