今天在工作的时候,遇到了一段代码,大概如下
prinf("%s %s\n", inet_ntop(AF_INET, &client_ip, ip, sizeof(ip)), inet_ntop(AF_INET, &service_ip, ip, sizeof(ip)));
这段代码的意思很简单就是把客户端和服务器端的ip都print出来,但是在测试的时候却发现,输出的结果service的ip却变成了client的ip。
相信这种问题有很多和我一样的初学者都会碰到过,而且有时候测试没怎么注意还真不容易看出问题。
接下来分析一下为什么会出现service的ip被client ip替代的情况。
首先我们编写下面的代码demo
#include <stdio.h>
char * copy(char *dest, char *src)
{
int i = 0;
while ((dest[i] = src[i++]) != '\0');
dest[i] = '\0';
return dest;
}
int main()
{
char dest[10] = {0};
char src1[10] = "aaaaa";
char src2[10] = "bbbbb";
printf("%s\n%s\n", copy(dest, src1), copy(dest, src2));
}
这段代码的意图很简单就不解释了~~
这串代码的执行结果很和上面说的问题一样,src2会被src1替代
问题到底出在哪里呢
我们不妨看一下这个demo的汇编
在汇编中我们不难看出,程序是先将src2移到寄存器中,再将src1移到同一个寄存器中,最后再将该寄存器中的内容打印出来。
这就解释了为什么会出现src2被src1代替的情况。