c++ Funktionen wollen nicht arbeiten

Und wenn ich mich jetzt nicht verlesen habe steht die STL, oder zumindest eine STL, nur über .NET zur Verfügung
Nein. STL ist ein Teil des C++-Standards.

Und nein, die Funktionen der WinAPI sind in 2 Versionen vorhanden. Eine mit einem A am Ende, und eine mit einem W am Ende. W für WideString (UNICODE) und A für AnsiString.

Wenn du nicht A oder W am Ende angibst, rufst du ein Makro auf, das, wenn _UNICODE definiert ist, nach der W-Variante, sonst nach der A-Variante aufgelöst wird.

Dies gibt es auch für die Zeichentypen char und wchar_t. TCHAR.

Wenn du keine besonderen Zeichen haben willst, kommst du mit char durchaus aus und nimmst einfach die Funktionsendung A bei den WinAPI-Funktionen.
 
Danke euch beiden nochmal.

std::string bzw std::wstring regelt das alles für dich

Das wollt ich hören. Ich möcht mich ja eigentlich nicht sonderlich mit den 'Roh'Typen rumschlagen, dachte nur dass ich dies besser vorher mache als nachher dann evtl den kompletten Code umzustellen weils eine riesen Baustelle geworden ist. Bin heut Abend wieder an meinem Rechner, dann ist std::string das erste was ich austeste.
Im übrigen: hab bei einer reinterpret_cast-Operation von wchar_t nach char zumindest schon mal keine Fehlermeldungen bekommen. Der Cast packt mir zwar kein Ergebnis in die char-Variable (bzw den Pointer), aber immerhin. :D Hoffe nun auf std::string! Wäre auf jeden Fall das wonach ich gesucht habe.
 
Nen reinterpret_cast is nen Holzhammer, der castet dir so ziemlich viel :D Und in char* zu konvertieren sollte so ziemlich immer möglich sein. Nur was drin steht, ist halt nicht immer sinnvoll (vgl. ASCII-Tabelle).
 
Holzhammer ist gut! Und wie recht du hast. Bin nun auf jeden Fall von string und wstring überzeugt. Nachdem ich nun die Memberfunktionen entdeckt habe! :D

Danke noch mal. Habe auch gelesen dass string und wstring quasi c++ Standard ist und char und wchar (wenn man so will) C Standard ist. Richtig? *duck und weg*

Jetzt bin ich schon mal ein ganzes Stückchen weiter und freunde mich so langsam mit C++ an. Nur die Konvertierung macht mir noch Probleme. Im übrigen habe ich mich nicht Stück für Stück in Templates eingelesen sondern nur hier und da ein bischenwas aufgeschnappt. Würdet ihr noch mal schauen

Der Part String2 = std::codecvt<string,wstring,std::mbstate_t>(String1); meldet
std::codecvt<_Elem,_Byte,_Statype>::~codecvt": Kein Zugriff auf protected Member, dessen Deklaration in der std::codecvt<_Elem,_Byte,_Statype>-Klasse erfolgte.
was möchte mir denn mein Computer damit sagen? ;-)

Hier alles im Zusammenhang...
Code:
    string String1 = "";
    wstring String2 = L"";
    String1 = "String1: ";
    String2 = L"String2: ";
    String1 = String1.append("Hallihallöle... Grüße euch");
    String2 = String2.append(L"hier dran muss noch geschraubt werden");
    String1 += "...";
    String2 += L"...";
    String2 = std::codecvt<string,wstring,std::mbstate_t>(String1);
    while(String1.find("ö")<String1.size()){String1 = String1.replace(String1.find("ö"),1,"\x94");}
    while(String1.find("ü")<String1.size()){String1 = String1.replace(String1.find("ü"),1,"\x81");}
    while(String1.find("ä")<String1.size()){String1 = String1.replace(String1.find("ä"),1,"\x84");}
    while(String1.find("Ö")<String1.size()){String1 = String1.replace(String1.find("Ö"),1,"\x99");}
    while(String1.find("Ü")<String1.size()){String1 = String1.replace(String1.find("Ü"),1,"\x9A");}
    while(String1.find("Ä")<String1.size()){String1 = String1.replace(String1.find("Ä"),1,"\x8E");}
    while(String1.find("ß")<String1.size()){String1 = String1.replace(String1.find("ß"),1,"\xE1");}
    cout <<  String1.c_str() << " (Size " << String1.size() << ")" << endl;
    wcout <<  String2.c_str() << " (Size " << String2.size() << ")" << endl;
PS.: Habe mir VC++ 2008 PE *hust* besorgt.
 
Ok, also ich habe jetzt fast alle Konvertierungen schon fertig. Aber für einen Fall muss ich noch einen char erweitern. Also in etwa...
Code:
    char *Destination;
    Destination="abc";
    Destination=Destination + "defg";
...aber das will er nicht wirklich. Sacht mir dass er mit zwei Pointern nix anfangen kann.
Und...
Code:
char Destination2[Source.size()];
Destination2[0]='a';//zum Beispiel...
will er auch nicht. Da sacht er mir dass anstelle von Source.size() nen konstanten Wert braucht! Blödmann, was soll das?
 
@Wessy

Bei ersten brauchst du strcat

und die size-Funktion kann theoretisch bei jedem programmaufruf etwas anderes ausgeben, um jedes mal eine andere Arraygröße zu erreichen musst du malloc/free bemühen, der vompiler macht das nicht für dich

@Hillkorn: was hat das mit printf zu tun
 
Hmm also, erstmal du kannst nicht einfach zwei Zeiger miteinander Addieren. Bzw. kannst du schon, doch kommt da nicht raus was du willst.

Um nicht zur Compilerzeit bekannte konstanten als Array-Größe nutzen zu können, musst du entweder auf den Heap arbeiten oder dir z.B. die Erweiterung vom GCC mal angucken. Der hat das drin. Doch entspricht das nicht dem Standard und sollte d.h. nicht verwendet werden.

Mit std::printf (Header: <cstdio>) kannst du in dem Fall nicht viel tun. std::sprintf wäre aber schon wieder was anderes und würde durchaus Funktionieren.

Am einfachsten ist unter C++, das ganze per std::string zu machen. Da ist Addition von Strings kein Problem.

Unter C würdest du per strcpy Strings kopieren und per strcat Strings anhängen.
 
Zurück