?
@Wutz: Das kann doch wohl nicht dein Ernst sein. ping spawnen, in Datei schreiben, dann die parsen? Viel umständlicher kriegt man das nicht hin, und ich halte es für brandgefährlich, derart dreckige Fummeleien gerade Anfängern als Lösungsmöglichkeit vorzuführen.
Ganz direkt für Windows:
#include <winsock2.h>
#include <stdio.h>
#include <string.h>
int main(void) {
WSADATA wsa;
struct hostent *p;
char s[256];
WSAStartup(MAKEWORD(2, 2), &wsa);
printf("Adresse: ");
fgets(s, 256, stdin);
s[strlen(s) - 1] = '\0'; /* Zeilenumbruch abschneiden */
p = gethostbyname(s);
if(p != NULL) {
printf("%d.%d.%d.%d\n",
(unsigned char) p->h_addr[0],
(unsigned char) p->h_addr[1],
(unsigned char) p->h_addr[2],
(unsigned char) p->h_addr[3]);
} else {
fputs("Fehler!\n", stderr);
}
WSACleanup();
return 0;
}
und ws2_32.lib dazulinken (MSVC: Projekteinstellungen -> Konfigurationseigenschaften -> Linker -> Eingabe -> Zusätzliche Abhängigkeiten)
Unter BSD-Systemen (d.h. allen, die das BSD 4.3-API erfüllen, also allen kontemporären Unices) geht das nahezu genauso, nur heißt es da statt winsock2.h netdb.h, und WSAStartup und WSACleanup entfallen ersatzlos. Eine ws2_32-Bibliothek gibt es da natürlich nicht dazuzulinken; wo sich gethostbyname befindet, kann systemabhängig sein. Auf GNU-Systemen (beispielsweise Linux) befindet sie sich in der libc, also muss weiter nichts dazugelinkt werden.