C - 使用sin_addr获取一个IP地址字符串

时间:2015-07-23 14:00:45

标签: c sockets ip

我正在尝试从struct in_addr获取IP地址并将其放在char数组中。我尝试了下面的代码,但是我得到了分段错误。

char ip[30];
strcpy(ip, (char*)inet_ntoa((struct in_addr)clt.sin_addr));

有谁能告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

扩展你的代码以使其编译

#include <netinet/in.h>  
struct sockaddr_in clt;
int main() {
  char ip[30];
  strcpy(ip, (char*)inet_ntoa((struct in_addr)clt.sin_addr));
}

试图在启用警告的情况下编译它(总是一个好主意)会发出一些警告,但肯定不起作用

$ gcc -Wall -Wextra -O3 ntoa.c -o ntoa && ./ntoa
ntoa.c: In function 'main':
ntoa.c:5:3: warning: implicit declaration of function 'strcpy' [-Wimplicit-function-declaration]
ntoa.c:5:3: warning: incompatible implicit declaration of built-in function 'strcpy' [enabled by default]
ntoa.c:5:3: warning: implicit declaration of function 'inet_ntoa' [-Wimplicit-function-declaration]
ntoa.c:5:14: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
ntoa.c:6:1: warning: control reaches end of non-void function [-Wreturn-type]
Segmentation fault
$

在顶部包含缺少函数声明的标题(总是一个好主意)

#include <arpa/inet.h>
#include <string.h>

显然修复了它:

$ gcc -Wall -Wextra -O3 ntoa.c -o ntoa && ./ntoa 
ntoa.c: In function 'main':
ntoa.c:8:1: warning: control reaches end of non-void function [-Wreturn-type]
$