一个数组分配大小的问题

来源:互联网 发布:style js order-color 编辑:程序博客网 时间:2024/06/06 00:11

这是写一个程序从文件中读取IP,MAC,client-hostname等信息时遇到的一个问题。

DHCP服务器每分配一个地址,都有一条记录放在dhcpd.leases文件中,记录的格式类似为:

lease 192.168.1.3 {  starts 3 2012/07/04 07:51:55;  ends 3 2012/07/04 09:51:55;  cltt 3 2012/07/04 07:51:55;  binding state active;  next binding state free;  hardware ethernet 00:0c:29:c7:4e:30;  uid "\001\220+4!40";  client-hostname "PC-003";}

在程序中,定义了如下字符数组存放读取的值

char ip[16];char mac[18];char client_hostname[128];
代码用gcc编译后运行。读取后应该显示:

ip: 192.168.1.3mac: 00:0c:29:c7:4e:30client-hostname: PC-003
但实际显示的是:

ip: mac: 00:0c:29:c7:4e:30client-hostname: PC-003
ip的值没有显示出来,用GDB跟踪调试,发现是在给mac赋值的语句执行后,ip的前三个字节被修改了,ip[0]被修改为“\0”。


但是如果将ip的数组空间大小改为20,这种问题就不会出现,ip的值能正常显示出来;同样的程序,ip数组空间大小定义为16,在Windows下用Dev-c++编译也能正常显示。。

我不明白为什么加大数组空间后就没问题了,这是linux下gcc的bug还是什么问题?