- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
#include <stdio.h>
#include <string.h> /* for strncpy */
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
int
main()
{
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_DGRAM, 0);
/* I want to get an IPv4 IP address */
ifr.ifr_addr.sa_family = AF_INET;
/* I want IP address attached to "eth0" */
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFADDR, &ifr);
close(fd);
/* display result */
char* ipaddr;
ipaddr = inet_ntoa(((struct sockaddr_in *)&(ifr.ifr_addr))->sin_addr);
printf("%s\n", ipaddr);
return 0;
}
对于这一行:
ipaddr = inet_ntoa(((struct sockaddr_in *)&(ifr.ifr_addr))->sin_addr);
我明白了
iptry.c: In function ‘main’:
iptry.c:31:9: warning: assignment makes pointer from integer without a cast [enabled by default]
为了
printf("%s\n", ipaddr);
我遇到段错误。
这是怎么回事?
最佳答案
inet_ntoa
在 header 中定义 <arpa/inet.h>
,
需要#include
,否则会出错
关于c - inet_ntoa 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15635803/
这个问题已经有答案了: Weird printf behaviour with inet_ntoa (2 个回答) 已关闭 5 年前。 让我很困惑,这个例子有不同的结果。是不是我哪里出了问题。 #in
有人知道 MySql INET_NTOA() 如何将整数值转换回 IP 地址格式吗?我想知道内部如何进行计算以将IP转换为其原始互联网标准点分十进制格式。 最佳答案 它使用网络将一个整数分解为四个字节
我在数据库中有一个表 (sessions),其第一列包含数字 IP 地址,例如: _____________ | srcIP | ------------- | 167973143 | | 1
inet_ntoa() 函数导致以下代码中的 Segmentation fault 错误。请告诉我,为什么。我该如何解决?非常感谢! void ClientAdd ( int clientSocket
我在/usr/include/arpa/inet.h 中看到下面这行: extern char *inet_ntoa (struct in_addr __in) __THROW; 但是它真正定义在哪里
我正在声明以下变量 unsigned long dstAddr; unsigned long gateWay; unsigned long mask; 这些变量包含网络字节顺序的 IP 地
#include #include /* for strncpy */ #include #include #include #include
尝试为数据包嗅探器编写处理程序。我在转换和 inet_ntoa() 方面遇到问题。代码如下: uint32_t *iphdr_srcaddr = malloc(sizeof(uint32_t)); i
我正在尝试使用 inet_ntoa 函数写入以下代码: printf("Got connection from: %s:%d\n", inet_ntoa(cli_addr.sin_addr.s_add
我使用函数 char* inet_ntoa(struct in_addr in), 编写了一个服务器当我包含标题时 和 ,可以生成带有编译器警告的可执行二进制文件,但是当程序处理来自 inet_nt
浏览 GNU C 库的源代码,我发现 inet_ntoa 是用 static __thread char buffer[18] 我的问题是,既然需要使用可重入的inet_ntoa,为什么GNU C库的
考虑以下程序: #include #include #include #include #include #include void printhost(cha
我应该是瞎了,因为我在 ubuntu 和 debian 的发行版中找不到这些命令,也没有包含它们的包。 我应该自己用 C 编写代码和编译它们(或者用 perl 或其他任何语言编写或查找此代码)还是它(
我正在理解 gethostbyname() 函数。当时我找到了下面的示例程序。 #include #include #include #include #include #include
好的,在发布这个问题之前,我已经检查了这里的线程 in_addr_t to string 我的问题不一样。 我知道 inet_ntoa 函数属于以下类型 char * inet_ntoa (struc
// char ip1[] = "127.0.0.1"; char ip2[] = "211.100.21.179"; printf("ip1: %s\nip2: %s\n", ip1, ip2);
#include #include #include #include #include int main(int argc, char **argv) { struct socka
我遇到了 inet_ntoa 导致 OSX 上的段错误的问题,这不会发生在 Linux 上。 我的测试代码如下。 // sample.c #include #include #include #
我查看了 inet_ntoa 的实现喜欢 this和 this , 我想知道为什么他们都分配了一个 18 个字符的缓冲区。 如果我取最大长度的 IPv4 地址字符串:255.255.255.255我需
当我在没有 arpa/inet.h 包含的情况下使用 inet_ntoa 时,编译器为什么不报告错误? 我运行了这段代码: struct sockaddr_in dest; printf("%d\n"
我是一名优秀的程序员,十分优秀!