String zu Char, Typenumwandlung

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

String zu Char, Typenumwandlung

Beitrag von naums » Fr Jan 08, 2010 2:42 pm

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?
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: String zu Char, Typenumwandlung

Beitrag von Xin » Fr Jan 08, 2010 2:49 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: String zu Char, Typenumwandlung

Beitrag von naums » Fr Jan 08, 2010 2:51 pm

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.
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: String zu Char, Typenumwandlung

Beitrag von Jside » Sa Jan 09, 2010 8:48 pm

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)

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: String zu Char, Typenumwandlung

Beitrag von Kerli » So Jan 10, 2010 12:26 am

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.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: String zu Char, Typenumwandlung

Beitrag von Jside » So Jan 10, 2010 3:33 am

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!)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: String zu Char, Typenumwandlung

Beitrag von Xin » So Jan 10, 2010 11:45 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: String zu Char, Typenumwandlung

Beitrag von naums » So Jan 10, 2010 5:32 pm

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 ^^
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: String zu Char, Typenumwandlung

Beitrag von Xin » So Jan 10, 2010 6:20 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: String zu Char, Typenumwandlung

Beitrag von naums » So Jan 10, 2010 6:54 pm

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
.globl truth
truth:
mov r0, #42
mov pc, lr

Antworten