C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

string in char * konvertieren?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Achim Stein
Guest





PostPosted: Mon May 10, 2004 3:57 pm    Post subject: string in char * konvertieren? Reply with 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
--
[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





PostPosted: Mon May 10, 2004 4:42 pm    Post subject: Re: string in char * konvertieren? Reply with quote



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





PostPosted: Mon May 10, 2004 4:54 pm    Post subject: Re: string in char * konvertieren? Reply with quote



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





PostPosted: Mon May 10, 2004 6:02 pm    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Mon May 10, 2004 6:28 pm    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Mon May 10, 2004 6:42 pm    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Tue May 11, 2004 5:44 am    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Tue May 11, 2004 6:01 am    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Tue May 11, 2004 6:13 am    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Tue May 11, 2004 6:24 am    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Thu May 13, 2004 9:10 am    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Thu May 13, 2004 10:45 am    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Thu May 13, 2004 4:41 pm    Post subject: Re: string in char * konvertieren? Reply with quote

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:Sad(__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





PostPosted: Thu May 13, 2004 8:06 pm    Post subject: Re: string in char * konvertieren? Reply with quote

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





PostPosted: Fri May 14, 2004 4:32 pm    Post subject: Re: string in char * konvertieren? Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.