ip4addr_ntoa和不可重入函数
在网络中,有一个转换IP地址到ASIIC字符串的函数,该函数的返回值所指向的ASIIC字符串驻留在静态内存中,所以该函数不可重入。
通俗的讲,在多任务系统中,一个任务执行在调用运行这个函数的时候,其他任务不能调用运行这个函数,如果你这样做了,那么二次调用的函数返回值是一样的,都是后次的值。
char*
ip4addr_ntoa(const ip4_addr_t *addr)
{
static char str[IP4ADDR_STRLEN_MAX];
return ip4addr_ntoa_r(addr, str, IP4ADDR_STRLEN_MAX);
}
以上同时涉及到一个问题,函数参数是结构体和结构体指针的区别
结构体做为函数参数的时候,是形参,所以不能改变结构体里面的值。
结构体指针作为函数参数的时候,是实参,可以改变结构体里面的值。