char array in string umformen ?
-
Hey Hey ! Nach BASIC fang gerade mit c++ an und nach stundenlangen googeln hat es mich nun hier her verschlagen ! Ich suche einen Befehl/source mit dem ich ein char array in einen string umwandeln kann ! sowas wie :
var = string(array);
Ich hoffe mir kann da einer ohne komplexe sources helfen !!!
MfG FedoX
-
FedoX schrieb:
...Ich suche einen Befehl/source mit dem ich ein char array in einen string umwandeln kann !...
std::string text = array;
-
char tt[88]; std::string var(tt);
-
Wow das geht ja echt sau schnell hier
erstmal vielen dank für die schnelle Hilfe ! Habe jetzt ein Problem mit der einbindung des Befehls !Ich hab es so probiert :
std::string Array_als_string(Array_als_array);
und so :
std::string Array_als_string = array_als_array;
aber Code:Blocks meckert : redeclaration of std:string array_als_string !
Was habe ich falsch gemacht ?
-
Hast du beide Möglichkeiten gleichzeitig ausprobiert? Das geht natürlich nicht. Für die erneute Deklaration müsstest du einen neuen Bezeichner wählen.
-
Nein erst die eine dann die andere Möglichkeit ! muss ich std: irgendwie deklarieren am anfang ?
-
FedoX schrieb:
Nein erst die eine dann die andere Möglichkeit ! muss ich std: irgendwie deklarieren am anfang ?
#include <string> int main() { char test[10] = "Test"; std::string test1(test); std::string test2 = test; }
-
@ asc:
Das sollte er eigentlich so gemacht haben...@ FedoX:
Schick bitte deinen gesamten Code inklusive Fehlermeldung und Zeile nochmals. Achte beim Code darauf, dass du [cpp]-Tags verwendest.
-
Oh Gott bin ich ein depp ! Habe meinen Fehler jetzt rausgefunden : Ich hatte am anfang std: deklariert ! Läuft jetzt alles rund ! Vielen Dank an Alle die mir geholfen haben !!!
PS : Wird nicht meine lezte Frage hier gewesen sein
-
Mist ! Dadurch konnte mein Problem doch nicht gelöst werden ! Ich poste am besten mal den quellcode :
#include <iostream> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <string> using namespace std; int main() { string user_name_string; char user_name[255]; char computer_name[255]; DWORD nSize; //Computer Name herrausbekommen nSize = sizeof( computer_name ); GetComputerName( computer_name, &nSize ); cout << "Computername: " << computer_name << endl; //User Name herrausbekommen nSize = sizeof( user_name ); GetUserName( user_name, &nSize ); cout << endl; getchar(); user_name_string = user_name; CopyFile("C:\\Dokumente und Einstellungen\\" + user_name_string + "\\Eigene Dateien\\Eigene Bilder\\Beispielbilder\\Blaue Berge.jpg", "C:\\BILD.jpg" , false); }
So wenn ich mein proggi ausführe sagt Code:Blocks : C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\test\main.cpp|35|error: cannot convert `std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to `const CHAR*' for argument `1' to `BOOL CopyFileA(const CHAR*, const CHAR*, BOOL)'|
...
-
Das ist auch nicht wirklich Standard-C++, was du da machst.
Was erwartet denn
CopyFile()
für Argumente? Der Fehlermeldung nach sollte das erste vom Typconst char*
sein. Du kannst zuerst einenstd::string
deklarieren und dann überc_str()
den Zeiger aufconst char
erhalten:std::string MyString = "...."; CopyFile(MyString.c_str(), ...);
Vielleicht kannst du auch
std::string::append()
benutzen, um Strings zusammenzuketten. Oder du rufst den Konstruktor mitstd::string("Text")
explizit auf.
-
Wenn ich mal ein wenig rumpfuschen darf ...
#include <iostream> #include <windows.h> // #include <stdio.h> Kein Standard C++ Header, richtig wäre <cstdio> // #include <stdlib.h> Kein Standard C++ Header, richtig wäre <cstdlib> // #include <sys/types.h> Wofür? // #include <sys/stat.h> Wofür? Die letzten 4 Header werden nicht benötigt, raus damit! #include <string> // using namespace std; // Auf using namespace sollte man, wenn möglich, verzichten. int main() { // char user_name[255]; // char computer_name[255]; // Bitte keine rohen Arrays in C++ std::vector<char> user_name(UNLEN + 1); // Richige Grösse verwenden -> siehe MSDN std::vector<char> computer_name(MAX_COMPUTERNAME_LENGTH + 1); // Richtige Grösse verwenden -> siehe MSDN // DWORD nSize; Bitte keine ungarische Notation! Ist aber Geschmacksache ... DWORD size = computer_name.size(); // nSize = sizeof( computer_name ); überflüssig jetzt. GetComputerName(&computer_name[0], &size); std::cout << "Computername: " << &computer_name[0] << std::endl; //User Name herrausbekommen // nSize = sizeof( user_name ); überflüssig jetzt. size = user_name.size(); GetUserName(&user_name[0], &size); std::cout << std::endl; // getchar(); Das ist C, hat in C++ nichts zu suchen! std::cin.get(); // <- macht das gleiche. // Als nächstes, für Pfadangaben, kann man unter Windows auch den Slash '/' nehmen. // Das macht es einfacher zu schreiben. std::string user_name_string = "C:/Dokumente und Einstellungen/"; user_name_string.append(&user_name[0], user_name.size() - 1); // ^ ohne das \0 Zeichen. user_name_string.append("/Eigene Dateien/Eigene Bilder/Beispielbilder/Blaue Berge.jpg"); CopyFile(user_name_string.c_str(), "C:/BILD.jpg", FALSE); // user_name_string.c_str() -> Hole einen null terminierten String // Zudem muss man oder sollte man TRUE/FALSE verwenden bei WinAPI Funktionen. // Weil die kennen bool eigentlich nicht. return 0; }
Zudem bitte C/C++ Code Tags verwenden.
C++ Referenz: http://www.cplusplus.com/reference/Und natürlich sollte man bei den WinAPI Funktionen noch überprüfen, ob sie erfolgreich waren oder nicht. Dazu war ich jetzt aber zu faul, es auch noch in den obigen Code reinzunehmen.
Grüssli
-
soo da bin ich wieder ! hatte die letzte zeit leider nicht genügend zeit (xD) um hier nen blick reinzufwerfen ! Ich habe jetzt deinen Quellcode kopiert und versucht zu starten doch meine neue IDE (habe jezzt Visual Studio express edition) beklagt sich über 17 Fehler !!! hier die Liste :
Fehler 1 error C2039: 'vector': Ist kein Element von 'std' c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 19
Fehler 2 error C2065: 'vector': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 19
Fehler 3 error C2062: 'char'-Typ unerwartet c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 19
Fehler 4 error C2039: 'vector': Ist kein Element von 'std' c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 20
Fehler 5 error C2065: 'vector': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 20
Fehler 6 error C2062: 'char'-Typ unerwartet c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 20
Fehler 7 error C2065: 'computer_name': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 23
Fehler 8 error C2228: Links von ".size" muss sich eine Klasse/Struktur/Union befinden. c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 23
Fehler 9 error C2065: 'computer_name': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 27
Fehler 10 error C2065: 'computer_name': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 28
Fehler 11 error C2065: 'user_name': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 32
Fehler 12 error C2228: Links von ".size" muss sich eine Klasse/Struktur/Union befinden. c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 32
Fehler 13 error C2065: 'user_name': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 34
Fehler 14 error C2065: 'user_name': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 45
Fehler 15 error C2065: 'user_name': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 45
Fehler 16 error C2228: Links von ".size" muss sich eine Klasse/Struktur/Union befinden. c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 45
Fehler 17 error C2664: 'CopyFileW': Konvertierung des Parameters 1 von 'const char *' in 'LPCWSTR' nicht möglich c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 50
-
Entweder du hast:
a) #include <vector> vergessen
b) using namespace std; vergessen
oder
c) vector<X> statt std::vector<X> (besser als b) ) geschrieben
-
Hey ! Danke hat geklappt lag am fahlenden vector ! jetzt sind es nur noch 4 Fehler :
Fehler 1 error C2065: 'UNLEN': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 20
Fehler 2 error C2664: 'GetComputerNameW': Konvertierung des Parameters 1 von 'char *' in 'LPWSTR' nicht möglich c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 28
Fehler 3 error C2664: 'GetUserNameW': Konvertierung des Parameters 1 von 'char *' in 'LPWSTR' nicht möglich c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 35
Fehler 4 error C2664: 'CopyFileW': Konvertierung des Parameters 1 von 'const char *' in 'LPCWSTR' nicht möglich c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\loader\loader\main.cpp 51
-
Entweder du benutzt Unicode (L"string" + std::wstring), oder su stellst dein Projekt mal auf Multibyte.
(Konfigurationseigenschaften->Allgemein->Zeichensatz auf Multi-Byte stellen).
-
wie gesagt ich fange gerade erst an und weis nicht wie ich dieses unicode benutze !!! kannst du mir des anhand code zeigen ??
-
FedoX schrieb:
wie gesagt ich fange gerade erst an und weis nicht wie ich dieses unicode benutze !!! kannst du mir des anhand code zeigen ??
Machs dir einfach und stell vorerst einfach auf Multibyte. Sofern du nicht vorhast eine japanische Version deines Programmes zu liefern, sollte das reichen.
Ansonsten schau mal hier im FAQ, oder Magazin nach. Da hat es IIRC etwas über das Thema.
-
Mann ! Ih find das in den Optionen nicht !!! Weis jemand wo ich diese Einstellung vornehmen kann ?
^^japanische versionen wirds noch nciht geben ! Erstmal reicht mir Europa und Amerika xD
-
drakon schrieb:
Entweder du benutzt Unicode (L"string" + std::wstring), oder su stellst dein Projekt mal auf Multibyte.
(Projekt->[Projektname]-Eigenschaften->Konfigurationseigenschaften->Allgemein->Zeichensatz auf Multi-Byte stellen).So.. Das sollte reichen.
(hab noch das fette hinzugefügt)