Seite 1 von 3

String zu Char, Typenumwandlung

Verfasst: Fr Jan 08, 2010 2:42 pm
von naums
Um den Windows Befehl fürs schreiben von INIs nutzen zu können, müssen 4 Parameter angegebn werden:

Code: Alles auswählen

WritePrivateProfileString(Überschrift, Attribut, Attributwert, Pfad);
Überschrift Attribut und Attribuwert Müssen CHAR sein. Leider speichere ich die Attributwerte innerhalb des Programms aus Gründen der Einfachheit als STRING. Wie konvertiere ich nun String zu einem Array von char?

Re: String zu Char, Typenumwandlung

Verfasst: Fr Jan 08, 2010 2:49 pm
von Xin
naums hat geschrieben:Um den Windows Befehl fürs schreiben von INIs nutzen zu können, müssen 4 Parameter angegebn werden:

Code: Alles auswählen

WritePrivateProfileString(Überschrift, Attribut, Attributwert, Pfad);
Überschrift Attribut und Attribuwert Müssen CHAR sein. Leider speichere ich die Attributwerte innerhalb des Programms aus Gründen der Einfachheit als STRING. Wie konvertiere ich nun String zu einem Array von char?
Das kommt drauf an, welche Art String Du hast...? Du schreibst in C++, also gehe ich erstmal von std::string aus, da wäre es myString.c_str().
Da Du von Windows sprichst, könntest Du auch einen CString haben... Was ist ein STRING?

Re: String zu Char, Typenumwandlung

Verfasst: Fr Jan 08, 2010 2:51 pm
von naums
ich benutze den std::string. Ums genau zu sagen: JA, ich spreche von Windows, weil ich es nur bei dem Windows befehl genau weiß, dass ich da probleme kriegen werde. Ich programmiere normalerweise für Windows UND Linux.

Re: String zu Char, Typenumwandlung

Verfasst: Sa Jan 09, 2010 8:48 pm
von Jside
C++ Quellcode hat geschrieben: std::string a;
a = "abc";
char *p = cons_cast<char *>(a.c_str());
So bekommst du dein char* aus einem std::string.c_str() (welcher const char* zurückgibt)

Re: String zu Char, Typenumwandlung

Verfasst: So Jan 10, 2010 12:26 am
von Kerli
Jside hat geschrieben:char *p = cons_cast<char *>(a.c_str());
Also den const_cast würde ich hier auf keinen Fall verwenden. Es hat schon seine Gründe warum ein const char* und kein char* zurückgegeben wird. Weil durch das fehlende const kann man den String verändern ohne dass das der Kompiler verbietet und string vertraut aber darauf das der Inhalt nicht verändert wird, was dann leicht böse enden kann.

Re: String zu Char, Typenumwandlung

Verfasst: So Jan 10, 2010 3:33 am
von Jside
Kerli hat geschrieben:
Jside hat geschrieben:char *p = cons_cast<char *>(a.c_str());
Also den const_cast würde ich hier auf keinen Fall verwenden. Es hat schon seine Gründe warum ein const char* und kein char* zurückgegeben wird. Weil durch das fehlende const kann man den String verändern ohne dass das der Kompiler verbietet und string vertraut aber darauf das der Inhalt nicht verändert wird, was dann leicht böse enden kann.
Stimmt auch wieder, aber wenn man aufpasst...(wobei das hier ja nicht der Fall sein kann) better safe than sorry...

So gehts natürlich auch:
C++ Quellcode hat geschrieben: int i;
std::string a;
a = "abc";

char p[a.length()];

for(i = 0; i < a.length(); i++) {
p = a;
}
p[i++] = '\0'; //String Terminieren(WICHTIG!)

Re: String zu Char, Typenumwandlung

Verfasst: So Jan 10, 2010 11:45 am
von Xin
Jside hat geschrieben:
Kerli hat geschrieben:
Jside hat geschrieben:char *p = cons_cast<char *>(a.c_str());
Also den const_cast würde ich hier auf keinen Fall verwenden. Es hat schon seine Gründe warum ein const char* und kein char* zurückgegeben wird. Weil durch das fehlende const kann man den String verändern ohne dass das der Kompiler verbietet und string vertraut aber darauf das der Inhalt nicht verändert wird, was dann leicht böse enden kann.
Stimmt auch wieder, aber wenn man aufpasst...(wobei das hier ja nicht der Fall sein kann) better safe than sorry...
Bitte nie auf etwas aufpassen wollen, was der Compiler das garantieren kann.

const_cast bedeutet fehlerhaftes Design. Und um so etwas zu nutzen, wenn man es schon verbockt hat, aber die Sache trotzdem noch verwenden muss, dann kann man mit const_cast in den Quellcode schreiben, wo man noch Mist entfernen muss

Ein Beispiel sind alte C-Bibliotheken, wo strlen() als strlen( char * ) statt strlen( char const * ) deklariert war.

Re: String zu Char, Typenumwandlung

Verfasst: So Jan 10, 2010 5:32 pm
von naums
Gesundheit???
äh. Ich wei durchaus dass ich nervig bin, und C++ ist ein bissl komisch. weil Keine Methode mit Strings arbeitet außer std::cout/cin, soweit ich das benutzt habe. Also mal einen eindeutigen Weg mit Kommentaren, was was is, und wo meine std::string variable hin muss, und was dann genau ausgegebn wird. Zum Bleistift Fopen arbeitet mit cont char* also am besten einen algorithmus zum konvertieren zu cont char*. - for dummies. danke ^^

Re: String zu Char, Typenumwandlung

Verfasst: So Jan 10, 2010 6:20 pm
von Xin
naums hat geschrieben:Gesundheit???
Hat wer Schnupfen oder warum verstehe ich das jetzt nicht???
naums hat geschrieben:äh. Ich wei durchaus dass ich nervig bin, und C++ ist ein bissl komisch. weil Keine Methode mit Strings arbeitet außer std::cout/cin, soweit ich das benutzt habe. Also mal einen eindeutigen Weg mit Kommentaren, was was is, und wo meine std::string variable hin muss, und was dann genau ausgegebn wird. Zum Bleistift Fopen arbeitet mit cont char* also am besten einen algorithmus zum konvertieren zu cont char*. - for dummies. danke ^^
Bisher nervst du mich nicht, es ist schließlich auch ein Einsteigerforum. Aaaber, mir scheint, Dir fehlen reichlich Grundkenntnisse. Was nutzt es Dir, wenn Du std::string kennst, aber offenbar nicht weißt, dass man

Code: Alles auswählen

char const * cString = "Hallo Welt";
std::string stdString = std::string( cString );
char const * anotherCString = stdString.c_str();
aufrufen kann.

Um einen Parser zu schreiben, solltest Du mit Arrays sicher umgehen können. Und zwar bevor Du lernst, wie man einen Parser formuliert. Ich weiß nicht, was Du kannst, aber ich denke, ich bekomme langsam eine Ahnung, was Du nicht kannst. Bevor Du große Projekte umsetzt (und damit meine ich nicht einen ini-Parser), benötigst Du die Grundlagen.

Re: String zu Char, Typenumwandlung

Verfasst: So Jan 10, 2010 6:54 pm
von naums
also die Typenumwandlung kenn ich char(Variable) Zum Bleistift. und programmieren (auch C++) kann ich ganz gut. Nur scheint mir das teilweise ein bisschen Wirr. Mein Projekt (der INIMaker) ist bislang 600 Lines groß, und noch lange nich fertig. na ich schreibe warscheinlich keinen Parser, sondern eher ein paar methoden, die jeweils Header, Sektion bzw.. Wert schreiben. und eine Methode die alles dreies vereint. Das will ich dann mit While steuern. bislang ohne besonderen erfolg, aber... wir werden es ja sehen. XD