gpt4 book ai didi

c - 将 char 指针传递给 C 中的函数

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:43 25 4
gpt4 key购买 nike

我正在尝试通过以下代码获取 Mac 地址:

void getMacAdress(unsigned char **address)
{
int s;
struct ifreq buffer;

s = socket(PF_INET, SOCK_DGRAM, 0);
memset(&buffer, 0x00, sizeof(buffer));
strcpy(buffer.ifr_name, "eth0");
ioctl(s, SIOCGIFHWADDR, &buffer);
close(s);
*address = (unsigned char *)buffer.ifr_hwaddr.sa_data;

for (s = 0; s < 6; s++)
{
printf("%.2X ", *(*address + s));
}

printf("\n");
}

int main(int argc, char *argv[])
{
unsigned char *address;

getMacAdress(&address);
int i;

for (i = 0; i < 6; i++)
{
printf("%.2X ", *(address + i));
}

printf("\n");
return 0;
}

我得到了正确的结果

08 00 27 0A 4E 98 
08 00 27 0A 4E 98

但是当我删除 getMacAddress() 函数中的 printf 片段代码时,它变成了:

void getMacAdress(unsigned char **address)
{
int s;
struct ifreq buffer;

s = socket(PF_INET, SOCK_DGRAM, 0);
memset(&buffer, 0x00, sizeof(buffer));
strcpy(buffer.ifr_name, "eth0");
ioctl(s, SIOCGIFHWADDR, &buffer);
close(s);
*address = (unsigned char *)buffer.ifr_hwaddr.sa_data;
printf("\n");
}

我得到了错误的结果

08 00 00 00 00 00

你能解释一下这是为什么吗?我该如何解决这个问题?

最佳答案

问题在这里:

*address = (unsigned char *)buffer.ifr_hwaddr.sa_data;

buffer 是函数的局部变量。因此,您存储在 address 中的指针指向一个局部变量,该变量在函数返回时被销毁,留下一个悬空指针。

尝试从此指针读取会导致未定义的行为。您的输出可以根据您打印时内存是否已被重新用于其他用途来解释。

关于c - 将 char 指针传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31128555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com