gpt4 book ai didi

c - sprintf 打印或返回 IP 地址的问题

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

这是我尝试设置一段时间的代码,我不明白为什么它不起作用。我在输入中创建了一个带有 sockaddr_in 的简单函数。我希望它返回(不打印)一个包含与 sockaddr_in 关联的 IP 的 char*。

char* get_ip_from_sockaddr(struct sockaddr_in client_addr)
{
int a = (client_addr.sin_addr.s_addr&0xFF);
int b = (client_addr.sin_addr.s_addr&0xFF00)>>8;
int c = (client_addr.sin_addr.s_addr&0xFF0000)>>16;
int d = (client_addr.sin_addr.s_addr&0xFF000000)>>24;

char* ip[24];
int n = sprintf(ip, "%d.%d.%d.%d", a, b, c, d);
printf("%s", ip); // The IP is correctly printed
return ip;
}

我像这样检索 ip:

char* ip = get_ip_from_sockaddr(client_addr);
printf("IP CLIENT: %s\n", ip);

这是我的程序的输出:

127.0.0.1IP CLIENT: �����

我不明白为什么它会在函数内部正确打印出来,但是当我从函数中检索时,IP 却没有打印出来。

最佳答案

您已将 ip 声明为一个指针数组,而不是一个字符数组。但更根本的是,它是一个位于堆栈上的本地数组,当您从函数返回时,内存将被释放并可以被任何东西覆盖。

如果您将 ip 声明为

static char ip[24];

,你应该是安全的。需要注意的是:对该函数的所有调用都将为 ip 字符串使用相同内存,因此一次调用的结果将被下一次调用覆盖。

关于c - sprintf 打印或返回 IP 地址的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594034/

25 4 0
文章推荐: javascript - Bitcore 创建交易脚本变量丢失
文章推荐: python - 我无法导入 CSV 文件?
文章推荐: html - 我希望
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com