| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: [C++] Simple Frage bezüglich string und const char* im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo Leute, ich kann mir gerade einfach keinen Reim drauf machen. Hab auch nicht allzu viel Erfahrung mit C ...
![]() |
| | #1 (permalink) |
| Registriert seit: 03.04.11 ![]() Likes: 10 | [C++] Simple Frage bezüglich string und const char* Anzeige Hallo Leute, ich kann mir gerade einfach keinen Reim drauf machen. Hab auch nicht allzu viel Erfahrung mit C spezifischen Sachen. Folgende 2 Beispielcodes: Code: string temp; const char* hostname; cin >> temp; hostname = temp.c_str(); getaddrinfo(hostname,...); --------------------- string temp; cin >> temp; getaddrinfo(temp.c_str(),...); Vielen Dank. Geändert von Tsjuder (30.01.12 um 13:11 Uhr) |
| | |
| | #2 (permalink) |
| Registriert seit: 27.12.07 ![]() Likes: 39 | const char* ist, wie der Name schon sagt konstant, d.h. nach der Initialisierung kannst du dessen Wert nicht mehr verändern. Eigentlich solltest du da einen Compilerfehler kriegen. Zudem ist (fast) alles was ein char*-String (auch bekannt als C-String) ist obsolet. Du solltest in C++ Programmen dich auf std::strings beschränken und alle Funktionen, die alte Strings benutzen meiden, bzw. wenn man mit solchen arbeiten muss, eben die Methoden .c_str() oder .c_str(char*) von std::string benutzen.
__________________ You shoot yourself in somebody else's foot.|Dann gabs da noch den Mathematiker der P?=NP in O(1) erklärte. |[A]| = p(·,|[A]|)+1 |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Member of Honour ![]() Registriert seit: 02.10.01 ![]() Likes: 0 | String ist eine Klasse, char ein Datentyp. |
| | |
| | #4 (permalink) | ||
| Registriert seit: 31.07.11 ![]() Likes: 1 | Möglicherweise ist das ein Schutzmechanismus um zu verhindern , dass der Speicher deallokiert wird aber der Pointer noch drauf verweist. Versuch mal n "strcpy(hoststring,str.c_str());" (Davor musst du halt noch Speicher allokieren , oder du benutzt grad "strdup") Viele Grüße nt0r EDIT: Zitat:
const char * --> Pointer auf const char (Kein Konstanter Pointer. Der wäre nämlich "const char * const" --> Konstanter Pointer auf "const char") Zitat:
![]() Er benutzt doch c_str() zur Umwandlung , oder lügen meine Augen jetzt ?
__________________ Nützt die Feder nichts , ist der Schreiber schuld ![]() Geändert von ntor (29.01.12 um 21:24 Uhr) | ||
| | |
| | #5 (permalink) | |
| Themenstarter Registriert seit: 03.04.11 ![]() Likes: 10 | Alle Antworten gleichzeitig .OK danke erstmal. Zitat:
Gibt es denn eine Funktion die einen std::string entgegen nimmt? Hmmm eine nähere Erläuterung wäre gut, denn das war mir auch soweit klar. Ich übergebe doch in beiden Fällen ein const char*. Ich muss im Nachinein zugeben, dass ich es doch etwas näher hätte erläutern sollen. Also wie gesagt: In beiden Fällen steht auch "www.google.de" im const char* drin, aber der Umweg über die eigene Variable funktioniert nicht, während die direkte Umwandlung innerhalb des Funktionsaufrufs funktioniert. | |
| | |
| | #6 (permalink) |
| Registriert seit: 31.07.11 ![]() Likes: 1 | Hast du denn probiert , was ich gesagt habe? Code: /*...*/ std::string temp; std::cin >> temp; const char *hostname = new char[temp.length() + 1] strcpy(hostname,temp.c_str()); /*...*/ Code: const char *hostname = strdup(temp.c_str()); nt0r PS: Zu dem const-Mist hab ich meinen oberen Post editiert
__________________ Nützt die Feder nichts , ist der Schreiber schuld ![]() |
| | |
| | #7 (permalink) |
| Themenstarter Registriert seit: 03.04.11 ![]() Likes: 10 | Ich hab meinen Code mal etwas bereinigt, da ich mit Netzwerkprogrammierung gerade erst angefangen habe und das Ganze ein wenig unübersichtlich wurde durch veraltete Tutorials, die z.B. noch gethostbyname benutzt haben. Ich hatte wohl anscheinend irgendwo anders einen Fehler im Code, denn mittlerweile funktioniert die erste Variante auch . Wobei ich nicht wirklich wüsste wo der Fehler gewesen sein soll oder aber Eclipse hat Mist mit den Builds gebaut...passiert schonmal gerne, dass irgendwelche Fehler im Editor die ganze Zeit angezeigt werden an Stellen, bei denen schon längst was anderes steht oder sogar eine leere Zeile.Aber wenn ihr sagt, ich sollte sowieso lieber mit den C++ Klassen arbeiten, dann werde ich das auch machen. Ich konnte mich bis jetzt nie wirklich entscheiden, wenn man eigentlich in C++ schreiben will, aber dann merkt, dass alle Funktionen die man benutzt in C implementiert sind. Besten dank! |
| | |
| | #8 (permalink) | |
| Registriert seit: 27.12.07 ![]() Likes: 39 | Zitat:
__________________ You shoot yourself in somebody else's foot.|Dann gabs da noch den Mathematiker der P?=NP in O(1) erklärte. |[A]| = p(·,|[A]|)+1 | |
| | |
| | #10 (permalink) |
| Registriert seit: 27.12.07 ![]() Likes: 39 | Laut dem POSIX standard nicht. Du kannst das entweder überall per .c_str() machen, oder eine eigene Funktion schreiben. Das kann man auch überladen, wobei du das eigentliche getaddrinfo explizit aus seinem namespace aufrufen musst, also vermutlich aus std:: Code: int GetAdressInfo(string node, string service, const struct addrinfo *hints, struct addrinfo **res) {
getaddrinfo(node.c_str(), service.c_str(), hints, res);
}
__________________ You shoot yourself in somebody else's foot.|Dann gabs da noch den Mathematiker der P?=NP in O(1) erklärte. |[A]| = p(·,|[A]|)+1 |
| | |
| | #11 (permalink) | ||
| Registriert seit: 31.07.11 ![]() Likes: 1 | Zitat:
Zitat:
Das sind so kleine Performance-Schmankerl , die man zwar erst in Massen spürt , aber doch etwas uneleganten Code produzieren. Viele Grüße nt0r
__________________ Nützt die Feder nichts , ist der Schreiber schuld ![]() Geändert von ntor (30.01.12 um 21:03 Uhr) | ||
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Frage bezüglich SSH | Ehnoah | (In)security allgemein | 10 | 01.04.11 07:15 |
| Frage bezüglich OpenNMS | Sfire83 | Network · LAN, WAN, Firewalls | 0 | 15.02.11 15:48 |
| [C] char in string | gugugs | Code Kitchen | 6 | 15.05.10 03:19 |
| [VB.NET] Char Array in String funktioniert nicht | sulpsulpc | Code Kitchen | 5 | 07.05.10 17:52 |
| String <=> cli::array | ChiefWiggum | Code Kitchen | 6 | 08.02.08 19:30 |