2016-10-23 6 views
0

Я пытаюсь скопировать IP-адрес из строки в struct sockaddr_in, но почему-то появляется некоторая ошибка.Невозможно скопировать ip-адрес из строки в sockaddr_in

#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char *buf = "128.10.25.102:30015"; 
    char ip[30]; 
    struct sockaddr_in s1_addport; 
    int i = 0; 

    while (buf[i] != ':') i++; 
    strncpy(ip, &buf[0], i); 
    ip[strlen(ip)] = '\0'; 

    printf("ip: %s, strlen:%zu\n",ip,strlen(ip)); 
    inet_aton(ip,&s1_addport.sin_addr); 
    printf("Server IP: %s\n",inet_ntoa(s1_addport.sin_addr)); 
    return 0; 
} 

Выход выше код показывает:

ip: 128.10.25.102, strlen:13 
Server IP: 0.0.0.0 

Существует некоторая ошибка в копировании значения из ip строки, которые я не могу понять. Что может быть причиной?

+0

Что ошибка выскакивает? – Downvoter

+0

Вы пытались использовать 'inet_pton' вместо' inet_aton'? – Charles

+0

Ошибка не выскользнула. server_IP отображается как 0.0.0.0 вместо 128.10.25.102. Извините за путаницу – re3el

ответ

3

Это проблема в коде Pastebin:

ip[strlen(ip)]='\0'; 

(Попытка добавить нулевой терминатор, но с использованием StrLen, что само по себе зависит от нулевого терминатора присутствовать).

Вот исправление:

.... 
while(buf[i]!=':') 
    i++; 
strncpy(ip,&buf[0],i); 
ip[i]='\0'; 
puts(ip); 
....