Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Std::string in char* umwandeln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.07.2005, 08:53 Uhr
Skippy



Ich hätte mal ne dumme frage ich nutze in nem Project nur strings
jetzt muss ich aber prüfen ob ne datei existiert die funktion dazu sieht so aus



C++:
int does_file_exist(char *filename)
{
    struct stat st;
    if(stat(filename, &st) || isDirectory(filename)) return FALSE;
    return TRUE;
}


den dateinamen hab ich aber als

C++:
struct http_request {

.
.
.
std::string       ufilename_
.
.
.
};




ich hatte zwar etwas in der richtung gefunden

die funktion c_str() aber damit bin ich net klargekommen

danke schonmal

mod edit: benutze die CPP Tags selber!

Dieser Post wurde am 13.07.2005 um 09:21 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.07.2005, 09:11 Uhr
ao

(Operator)


Das wär genau das Richtige, womit kommst du nicht klar?

C++:
struct http_request hr;

/* hr wird ausgefuellt */

int nResult = does_file_exist (hr.ufilename_.c_str());


ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.07.2005, 10:14 Uhr
Skippy



in den beispielen die ich fand wurde immer erst ein char angelegt

und dann mit
char = ufilename-.cstr()


der wert reingeschrieben

und dann funktion(char) der aufruf das klappte aber irgendwie überhaupt nicht da kamen dann nur fehlermeldungen immer nach dem motto illegale konvertierung von char char*
oder illegaler parameter der funktion usw

und danke für die hilfe hätt nicht gedacht das es so einfach zu benutzen ist (c_str()).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.07.2005, 11:25 Uhr
(un)wissender
Niveauwart


Unterschiede zwischen char* und char. Ersteres ist eine Buchstabenkette und zweites ein einzelner Buchstabe. std::string::c_str() gibt immer const char* zurück.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.07.2005, 12:02 Uhr
Skippy



ok hatte das problem gefunden als ich das jetzt eingebaut hatte kam wieder die fehlermeldung
illegal conversion from const char* nach char*

mein problem war das ich hätte in den prototypen und der funktion jeweils das

char *filename durch const char *filename ersetzen hätte müssen als ich das vorher probiert hatte ersetzte ich das nur in der funktion und habe den prototypen vergessen


@unwissender heisst das sternchen in char *filename nicht bei mir pointer auf filename?
oder hab ich etwas falsch verstanden
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.07.2005, 14:04 Uhr
(un)wissender
Niveauwart


Sternchen heißt einfach Pointer, mehr nicht. filename ist in diesem Fall also die Zeichenkette.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.03.2006, 12:01 Uhr
Patricia



hallo

ich hab den selben fehler : illegal conversion from const char* nach char* ebenfalls wenn ich den string mit c_str umwandle.
ich kann aber den parameter nicht in const char* ändern, da die Fkt nicht von mir ist und sie den wert in der Fkt noch ändert. Hat jemand ne Idee wie man das anders lösen kann?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.03.2006, 16:20 Uhr
ao

(Operator)



Zitat von Patricia:
ich kann aber den parameter nicht in const char* ändern, da die Fkt nicht von mir ist und sie den wert in der Fkt noch ändert.

In diesem Fall musst du den std::string in ein char-Array kopieren, z.B. so:

C++:
std::string s = "Hier ist der String";

int n = s.length (); // Länge bestimmen; brauchen wir ein paar mal
char * pcCopy = new char [n + 1]; // Array holen
::memset (pcCopy, 0, n + 1);  // Array initialisieren
s.copy (pcCopy, n); // String-Daten kopieren

func (pcCopy); // Funktion aufrufen

delete [] pcCopy; // Aufräumen



Das ist lästig und sieht kacke aus, aber C-C++-Interface-Code ist selten schön.

ao

Dieser Post wurde am 24.03.2006 um 16:23 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.03.2006, 09:18 Uhr
Patricia



Dankeschön. Klappt damit echt super.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.03.2006, 12:35 Uhr
RHBaum




Zitat:

Das ist lästig und sieht kacke aus, aber C-C++-Interface-Code ist selten schön.



schoenheit ist relativ ^^ aber ok ...

Trotzdem kann man auch sowas zu einzigartiger schoenheit verhelfen, in dem man die C-funktionen wrappt, in wunderschoene C++ template klassen z.b. , die mit allen auspraegungen des std::basic_strings klarkommen ^^

Aber einer muss sich den schmutz halt mal antun und leider gibts nicht fuer alles c++ schnittstellen.

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: