2016-10-23 32 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

這是你的代碼引擎收錄的問題:

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

(試圖追加空終止,但使用strlen的,這本身就依賴於空結束在場)。

這裏是修復:

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