Wie erklären wchar_t und seine string-Wert später auf?
Bin ich für die Entwicklung für Windows, habe ich nicht gefunden ausreichende Informationen über, wie man richtig deklarieren und später am set ein unicode-string. So weit,
wchar_t myString[1024] = L"My Test Unicode String!";
Was ich übernehmen oben tut, ist [1024] ist die zugewiesene Zeichenkette der Länge, wie viele Zeichen brauche ich, um max in diesem string. L"" stellt sicher, dass die Zeichenfolge in Anführungszeichen ist unicode (Ein alt-ich fand, ist _T()). Nun später in meinem Programm, wenn ich versuche zu setzen, dass string in einen anderen Wert von,
myString = L"Another text";
Bekomme ich compiler Fehler, was mache ich falsch?
Wenn jemand auch hat eine einfache und in-Tiefe unicode-app Ressource, ich würde gerne einige links, die verwendet werden, um Lesezeichen eine website, die gewidmet war, aber scheint, dass jetzt Weg ist.
BEARBEITEN
Ich den gesamten code, den ich verwenden möchten, dieses als DLL-Funktion aber bisher nichts zurückgegeben.
#include "dll.h"
#include <windows.h>
#include <string>
#include <cwchar>
export LPCSTR ex_test()
{
wchar_t myUString[1024];
std::wcsncpy(myUString, L"Another text", 1024);
int myUStringLength = lstrlenW(myUString);
MessageBoxW(NULL, (LPCWSTR)myUString, L"Test", MB_OK);
int bufferLength = WideCharToMultiByte(CP_UTF8, 0, myUString, myUStringLength, NULL, 0, NULL, NULL);
if (bufferLength <= 0) { return NULL; } //ERROR in WideCharToMultiByte
return NULL;
char *buffer = new char[bufferLength+1];
bufferLength = WideCharToMultiByte(CP_UTF8, 0, myUString, myUStringLength, buffer, bufferLength, NULL, NULL);
if (bufferLength <= 0) { delete[] buffer; return NULL; } //ERROR in WideCharToMultiByte
buffer[bufferLength] = 0;
return buffer;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Ansatz ist zu erklären, dass die saite sich anders als in den ersten Platz:
Wenn Sie darauf bestehen in der Verwendung von arrays von
wchar_t
direkt, die Sie verwenden würdenwcscpy()
oder besserwcsncpy()
aus<cwchar>
:1024
ist die maximale Anzahl der Zeichen, die kopiert werden. Ich sehe nicht, in welcher Weise die Verwendung vonwcsncpy()
ist falsch. Wenn es verwendetwcscpy()
es wäre eine chance, um Kopie mehr Zeichen, als Platz vorhanden ist.wcscpy()
: -), bemerkte ich ein nerviges Unterschied zustrncpy()
aber:wcsncpy(t, s, n)
eigentlich immer speichertn
Werte (möglicherweise null).std::
Präfix) und<wchar.h>
ohne (ich aktualisierte die Antwort).<string>
.wcsncpy
leiden die gleichen Probleme wiestrncpy
(ohne null-Terminierung auf überlauf)?std::wstring
.initialisiert wird das array wie
aber
ist eine Aufgabe, die u nicht auf arrays. u kopieren Sie den Inhalt des neuen string in Ihre alten array:
wird oder ob ein Zeiger
oder als nawaz, schlug
copy_n
wchar_t (&newstring)[] = L"Another text";
sollte nicht kompilieren.std::copy_n(newstring, wsclen(newstring)+1, myString);
liest sich besser.