这是写一个程序从文件中读取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.3
mac: 00:0c:29:c7:4e:30
client-hostname: PC-003
但实际显示的是:
ip:
mac: 00:0c:29:c7:4e:30
client-hostname: PC-003
ip的值没有显示出来,用GDB跟踪调试,发现是在给mac赋值的语句执行后,ip的前三个字节被修改了,ip[0]被修改为“\0”。
但是如果将ip的数组空间大小改为20,这种问题就不会出现,ip的值能正常显示出来;同样的程序,ip数组空间大小定义为16,在Windows下用Dev-c++编译也能正常显示。。
我不明白为什么加大数组空间后就没问题了,这是linux下gcc的bug还是什么问题?