Probleme mit Typenumwandlung
-
int main(void) { int PortNo; char* IPAddress; cin >> PortNo; cout << endl; cin >> IPAddress; cout << endl; ConnectToHost(PortNo, IPAddress); } bool ConnectToHost(int PortNo, char* IPAddress) { target.sin_port = htons (PortNo); //Port to connect on target.sin_addr.s_addr = inet_addr (IPAddress); //Target IP ... }Es geht um die Werte PortNo und IPAddress: Ich bekomm zwar beim Kompilieren keinen Fehler, jedoch beim Ausführen, denn das Programm stürzt dann unerwartet einfach ab.
Wenn ich die beiden Werte direkt eintrage bzw. nicht abfrage, funktioniert es:
ConnectToHost(21, "121.122.12.12");Ich möchte die beiden Werte aber während dem Ausführen abfragen können.

-
benutz std::string... dein Programm stuerzt ab, da du keinen Speicher fuer IPAdress anforderst
-
wie meinst du? wo soll ich std::string benutzen?
-
Du sollst std::string anstelle von char* benutzen.
-
Mit char* IPAddress erzeugst du lediglich einen Pointer, dem aber noch kein Speicherbereich zugewiesen ist. Das müsstest du z.B. mit malloc machen. Einfacher ist da, wie bereits ein, zwei Mal erwähnt wurde, die Benutzung von std::string.
-
Dein Fehler liegt in Zeile 4, schreibe mal statt char *IPAddress,
char IPAddress[ 13 ] ( xxx.xxx.xxx\0 = 13 ). Du solltest nach jedem Aufruf von cin >> xxx, ein cin.sync( ) schreiben, damit dein Lesebuffer da wieder geleert und syncronisiert wird.Greetz Tobi
-
#include <string> int main(void) { int PortNo; std::string IPAddress; cin >> PortNo; cout << endl; cin >> IPAddress; cout << endl; ConnectToHost(PortNo, IPAddress); } bool ConnectToHost(int PortNo, std::string IPAddress) { target.sin_port = htons (PortNo); //Port to connect on target.sin_addr.s_addr = inet_addr (IPAddress.c_str()); //Target IP ... }
-
danke. leider fordert dann aber die funktion
target.sin_addr.s_addr = inet_addr (IPAddress); //Target IPeinen const char* und beim kompilieren heisst es "cannot convert std::string to const char*
-
string hat eine Memberfunktion namens c_str() die einen const char* zurück liefert.
-
target.sin_addr.s_addr = inet_addr (IPAddress.c_str()); //Target IP
-
alles klar, hat geklappt!
vielen dank