 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Achim Stein Guest
|
Posted: Mon May 10, 2004 3:57 pm Post subject: string in char * konvertieren? |
|
|
Hallo,
ich versuche gerade ein Programm zu schreiben, das ein anderes aufruft.
Dafür hatte ich bis jetzt den Befehl system(char *) verwendet. Jetzt
habe ich aber mein Programm auf die string-Klasse umgestellt und der
Befehl verweigert seinen Dienst.
Gibt es eine Möglichkeit Objekte der string-Klasse ins char * Format zu
konvertieren oder gibt es einen anderen Befehl zum Aufruf von externen
Programmen der sie direkt unterstützt?
Danke für jeden Tip.
Gruß
Achim
--
[email]steinachim (AT) gmx (DOT) de[/email]
http://www.steinachim.de.vu
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Stefan Reuther Guest
|
Posted: Mon May 10, 2004 4:42 pm Post subject: Re: string in char * konvertieren? |
|
|
Achim Stein wrote:
| Quote: | ich versuche gerade ein Programm zu schreiben, das ein anderes aufruft.
Dafür hatte ich bis jetzt den Befehl system(char *) verwendet. Jetzt
habe ich aber mein Programm auf die string-Klasse umgestellt und der
Befehl verweigert seinen Dienst.
|
std::string cmd = "format c:";
std::system(cmd.c_str());
Stefan
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Martin Winkler Guest
|
Posted: Mon May 10, 2004 4:54 pm Post subject: Re: string in char * konvertieren? |
|
|
Achim Stein schrieb:
| Quote: | Hallo,
ich versuche gerade ein Programm zu schreiben, das ein anderes aufruft.
Dafür hatte ich bis jetzt den Befehl system(char *) verwendet. Jetzt
habe ich aber mein Programm auf die string-Klasse umgestellt und der
Befehl verweigert seinen Dienst.
Gibt es eine Möglichkeit Objekte der string-Klasse ins char * Format zu
konvertieren oder gibt es einen anderen Befehl zum Aufruf von externen
Programmen der sie direkt unterstützt?
Danke für jeden Tip.
Gruß
Achim
|
Du suchst std::string::c_str()
Gruß
Martin
--
http://www.jumli.de
http://www.jumlidev.de/forum/
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Daniel Albuschat Guest
|
Posted: Mon May 10, 2004 6:02 pm Post subject: Re: string in char * konvertieren? |
|
|
Achim Stein wrote:
Die Loesung fuer dein spezifisches Problem wurde dir ja bereits
gegeben. Allerdings habe ich noch weitere Anmerkungen.
| Quote: | ich versuche gerade ein Programm zu schreiben, das ein anderes aufruft.
Dafür hatte ich bis jetzt den Befehl system(char *) verwendet.
|
Sofern du von std::sytem redest, ist der Prototyp nicht ganz korrekt.
std::system nimmt einen const char * als Parameter. Das ist in sofern
wichtig, weil std::string::c_str auch einen const char * liefert.
Einer Funktion, die einen char* erwartet, koennte man nicht den
Rueckgabewert von std::string::c_str geben.
Fuer diejenigen, die diesen Beitrag z.B. ueber einen Suchdienst gefunden
haben, und tatsaechlich vor dem Problem stehen, dass sie einen char*
brauchen, hier die Loesung:
#include <string>
#include <cstring>
void foo( char * ) { }
int main() {
std::string str( "foobar" );
char *buffer = new char[ str.size()+1 ];
// +1 fuer die terminierende ' '
std::strcpy(buffer, str.c_str());
foo( buffer );
delete [] buffer;
}
Es muss allerdings darauf geachtet werden, ob die Funktion, der der
Puffer uebergeben wird, nicht evtl. mehr Speicher braucht. Dazu
sollte man die Dokumentation der Funktion heranziehen.
MfG,
Daniel Albuschat
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Karl Jenz Guest
|
Posted: Mon May 10, 2004 6:28 pm Post subject: Re: string in char * konvertieren? |
|
|
Achim Stein schrieb:
| Quote: |
Gibt es eine Möglichkeit Objekte der string-Klasse ins char * Format
zu konvertieren oder gibt es einen anderen Befehl zum Aufruf von
externen Programmen der sie direkt unterstützt?
|
Hallo Achim,
versuche mal: MyString.c_str () ;
--
Mfg Karl Jenz
http://karl.jenz.bei.t-online.de
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Achim Stein Guest
|
Posted: Mon May 10, 2004 6:42 pm Post subject: Re: string in char * konvertieren? |
|
|
| Quote: |
Du suchst std::string::c_str()
Gruß
Martin
|
Danke für die schnelle Reaktion. Das war genau, was ich gesucht hatte :-)
Gruß
Achim
--
[email]steinachim (AT) gmx (DOT) de[/email]
http://www.steinachim.de.vu
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Peter Schütte Guest
|
Posted: Tue May 11, 2004 5:44 am Post subject: Re: string in char * konvertieren? |
|
|
Daniel Albuschat schrieb:
| Quote: | Fuer diejenigen, die diesen Beitrag z.B. ueber einen Suchdienst gefunden
haben, und tatsaechlich vor dem Problem stehen, dass sie einen char*
brauchen, hier die Loesung:
std::string str( "foobar" );
char *buffer = new char[ str.size()+1 ];
// +1 fuer die terminierende ' '
std::strcpy(buffer, str.c_str());
foo( buffer );
delete [] buffer;
|
Man könnte die "const'ness" aber auch einfach wegcasten, mit einem
entsprechenden Kommentar ist das kürzer und IMHO schöner!
Gruß Peter
--
.... aber es gibt auch Zeiten, zu denen ich auf irgendeine hässliche
Aschenbahn will und dort einfach losstürmen.
[Hal Higdon]
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Christoph Rabel Guest
|
Posted: Tue May 11, 2004 6:01 am Post subject: Re: string in char * konvertieren? |
|
|
Peter Schütte wrote:
| Quote: | Daniel Albuschat schrieb:
Fuer diejenigen, die diesen Beitrag z.B. ueber einen Suchdienst gefunden
haben, und tatsaechlich vor dem Problem stehen, dass sie einen char*
brauchen, hier die Loesung:
std::string str( "foobar" );
char *buffer = new char[ str.size()+1 ];
// +1 fuer die terminierende ' '
std::strcpy(buffer, str.c_str());
foo( buffer );
delete [] buffer;
Man könnte die "const'ness" aber auch einfach wegcasten, mit einem
entsprechenden Kommentar ist das kürzer und IMHO schöner!
|
Nein, ist es nicht. Im Zweifelsfall ist das undefiniertes Verhalten!
Wenn man das const hier wegcastet, sollte man schon sehr genau wissen
was foo mit dem String tun wird.
In den meisten Fällen in denen der const_cast verwendet wird ist er ein
Hinweis auf einen Designfehler oder Programmierfehler.
mfg
Christoph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Peter Schütte Guest
|
Posted: Tue May 11, 2004 6:13 am Post subject: Re: string in char * konvertieren? |
|
|
Christoph Rabel schrieb:
| Quote: | Peter Schütte wrote:
Man könnte die "const'ness" aber auch einfach wegcasten, mit einem
entsprechenden Kommentar ist das kürzer und IMHO schöner!
Nein, ist es nicht. Im Zweifelsfall ist das undefiniertes Verhalten!
Wenn man das const hier wegcastet, sollte man schon sehr genau wissen
was foo mit dem String tun wird.
In den meisten Fällen in denen der const_cast verwendet wird ist er ein
Hinweis auf einen Designfehler oder Programmierfehler.
|
Hüstl, natürlich nur in den Fällen wo man eigentlich weiß das nur die
Schnittstelle der aufzurufenden Funktion "kaputt" ist und sie den String
nicht ändert.
Klar, prinzipiell hast Du natürlich Recht.
Gruß Peter
--
.... aber es gibt auch Zeiten, zu denen ich auf irgendeine hässliche
Aschenbahn will und dort einfach losstürmen.
[Hal Higdon]
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Daniel Albuschat Guest
|
Posted: Tue May 11, 2004 6:24 am Post subject: Re: string in char * konvertieren? |
|
|
Peter Schütte wrote:
| Quote: | Man könnte die "const'ness" aber auch einfach wegcasten, mit einem
entsprechenden Kommentar ist das kürzer und IMHO schöner!
|
Das *kann*, unter gewissen Umstaenden, moeglich sein. Allerdings (falls
du meinen Kommentar unter dem Code gelesen hast) wird eine Funktion, die
einen char * nimmt, die Zeichenkette auch veraendern wollen.
Z.B. fallen mir spontan mysql_escape_string respektive
mysql_real_escape_string ein.
Dort steht in der Dokumentation:
,---
| Quote: | The string pointed to by /from/ must be length bytes long. You must
allocate the /to/ buffer to be at least length*2+1 bytes long. (In the
worst case, each character may need to be encoded as using two bytes,
and you need room for the terminating null byte.)
`--- |
MfG,
Daniel Albuschat
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Georg Maaß Guest
|
Posted: Thu May 13, 2004 9:10 am Post subject: Re: string in char * konvertieren? |
|
|
Daniel Albuschat wrote:
| Quote: | std::strcpy(buffer, str.c_str());
|
Gehört das strcpy zum Namensraum std? Ist std::strcpy richtig? Ist
::strcpy nicht richtiger? Das ist doch so ein gräßliches C-Ding.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Ludwig Pumberger Guest
|
Posted: Thu May 13, 2004 10:45 am Post subject: Re: string in char * konvertieren? |
|
|
Georg Maaß schrieb:
| Quote: | Daniel Albuschat wrote:
std::strcpy(buffer, str.c_str());
Gehört das strcpy zum Namensraum std? Ist std::strcpy richtig? Ist
::strcpy nicht richtiger? Das ist doch so ein gräßliches C-Ding.
|
#include <string.h> => ::strcpy
#include <cstring> => std::strcpy
Zweitere Variante ist empfohlen. Leider schmeissen die meisten
Standardlibraries die C-Symbole bei der <c*> Variante trotzdem auch in den
globalen Namensbereich.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Stefan Reuther Guest
|
Posted: Thu May 13, 2004 4:41 pm Post subject: Re: string in char * konvertieren? |
|
|
Georg Maaß wrote:
| Quote: | Daniel Albuschat wrote:
std::strcpy(buffer, str.c_str());
Gehört das strcpy zum Namensraum std? Ist std::strcpy richtig? Ist
::strcpy nicht richtiger? Das ist doch so ein gräßliches C-Ding.
|
In der Theorie bekommst du std::strcpy aus <cstring> und ::strcpy aus
dem veralteten (deprecated) <string.h>.
In der Praxis bekommen das viele Compiler nicht auf die Reihe, so dass
die portabelste Möglichkeit
using namespace std;
strcpy(...);
ist (für strXXX, isXXX und memXXX).
- Borland C++ 5.5 macht bei diversen Optimierungen das Äquivalent von
#define strcpy __strcpy__
und __strcpy__ gibt es nur auf der äußersten Ebene, nicht in std.
- Unter Linux mit libc5 sind insbesondere die ctype-Funktionen Makros,
so dass
std::isspace(x)
zu
std: (__ctype_table[(x)] & irgendwas) != 0)
expandiert.
- MSVC++ hat (zumindest in der Version, mit der ich gelegentlich
arbeite), die C-Bibliothek gar nicht in std.
Der hässliche Workaround von oben funktioniert mit allen.
Stefan
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Thu May 13, 2004 8:06 pm Post subject: Re: string in char * konvertieren? |
|
|
Ludwig Pumberger wrote:
| Quote: | Georg Maaß schrieb:
Daniel Albuschat wrote:
std::strcpy(buffer, str.c_str());
Gehört das strcpy zum Namensraum std? Ist std::strcpy richtig? Ist
::strcpy nicht richtiger? Das ist doch so ein gräßliches C-Ding.
#include <string.h> => ::strcpy
#include <cstring> => std::strcpy
Zweitere Variante ist empfohlen. Leider schmeissen die meisten
Standardlibraries die C-Symbole bei der <c*> Variante trotzdem auch in
den globalen Namensbereich.
|
Es würde eigentlich doch auch nicht viel bringen, wenn sie es nicht
wären, oder?
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Daniel Albuschat Guest
|
Posted: Fri May 14, 2004 4:32 pm Post subject: Re: string in char * konvertieren? |
|
|
Rolf Magnus wrote:
| Quote: | Ludwig Pumberger wrote:
#include <string.h> => ::strcpy
#include <cstring> => std::strcpy
Zweitere Variante ist empfohlen. Leider schmeissen die meisten
Standardlibraries die C-Symbole bei der <c*> Variante trotzdem auch in
den globalen Namensbereich.
Es würde eigentlich doch auch nicht viel bringen, wenn sie es nicht
wären, oder?
|
Was meinst du damit?
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|