Ich versuche eine IP-Adresse (derzeit IPv4, aber erkennt IPv6) von einem int-Array-Format in eine formatierte Zeichenfolge zu konvertieren. Ich arbeite an Ubuntu Linux.Probleme beim Ändern der IP-Adresse von int in Zeichenfolge
Ich unterscheide zwischen IPv4 und IPv6-Adressen, und dann versuchen, das int-Array in eine Zeichenfolge zu konvertieren.
Dies ist der Code, den ich verwende:
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
int main(void)
{
int i;
unsigned int val32;
int ma_ip[4];
char m_ip[4];
char ipaddr[INET_ADDRSTRLEN], ipv6[INET6_ADDRSTRLEN];
int no = 0;
char *token;
char s3[] = "10.1.35.1";
/* just example. test only one ip address.. */
for(i = 0; i < 1; i++)
{
char *mm = strstr(s3, ":");
if(*mm != NULL)
{
token = strtok(s3, ":");
while(token != NULL)
{
token = strtok(NULL, ":");
no++;
}
if(no >= 2 && no <= 7)
printf("\nthis is ipv6\n");
else
printf("\nwrong ipv6\n");
}
else
{
token = strtok(s3, ".");
while(token != NULL)
{
token = strtok(NULL, ".");
no++;
}
if(no == 4)
{
printf("\nthis is ipv4.\n");
val32 = inet_addr(s3)
ma_ip[i] = val32;
}
else
printf("\nwrong ipv4.\n")
}
inet_ntop(AF_INET,&ma_ip[0],ipaddr,INET_ADDRSTRLEN);
printf("\nipaddr = %s\n", ipaddr);
strcpy(&m_ip[0], ipaddr);
printf("\nafter strcpy = %s\n", m_ip[0]);
}
}
Dieser Ausgang ist falsch:
ipaddr = 0.0.0.10
Es sollte eigentlich sein:
ipaddr = 10.1.35.1
Ich habe auch diesen Fehler in der letzten printf
nach der strcpy
:
Format ‚% s‘ erwartet Argument vom Typ ‚char *‘, aber Argument 2 hat ‚int‘ Fehler geben! **
, warum dies geschieht, und wie kann ich es beheben?
Danke !!!! Es klappt! – kara
'strcpy (& m_ip [0], ipaddr);' ist furchtbar falsch. Verwenden Sie nicht 'strcpy', verwenden Sie' strncpy'.'char [4]' ist eindeutig nicht groß genug für eine formatierte IP-Adresse. – Zulan
Ja, Sie haben Recht. Ich habe gerade das strtok() - Problem des Codes bemerkt und schnell daran geändert. Habe das strcpy() Problem nicht bemerkt. Vielen Dank. – Lin