0

文字列から sockaddr_in 構造体に IP アドレスをコピーしようとしていますが、何らかのエラーが発生します。

#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私が理解できないエラーがあります。その理由は何ですか?

4

1 に答える 1

3

これは、ペーストビン コードの問題です。

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

(nullターミネータを追加しようとしていますが、strlenを使用しています。これは、nullターミネータが存在することに依存しています)。

修正は次のとおりです。

....
while(buf[i]!=':')
    i++;
strncpy(ip,&buf[0],i);
ip[i]='\0';
puts(ip);
....
于 2016-10-23T16:38:21.017 に答える