Comment déclarer wchar_t et l'ensemble de sa chaîne de valeur plus tard?
Je suis en train d'élaborer pour Windows, je n'ai pas trouvé d'informations adéquates sur la façon de déclarer correctement et, plus tard, sur le plateau d'une chaîne unicode. Jusqu'à présent,
wchar_t myString[1024] = L"My Test Unicode String!";
Ce que je assumer ci-dessus n'est [1024] est la répartition de la longueur de la chaîne de la façon dont beaucoup de personnages que j'ai besoin d'avoir le max dans cette chaîne. L"" permet de s'assurer de la chaîne entre guillemets est unicode (Un alt que j'ai trouvé est _T()). Maintenant, plus tard dans mon programme quand je suis en train de mettre cette chaîne à une autre valeur,
myString = L"Another text";
J'obtiens des erreurs de compilation, ce que je fais mal?
Aussi si quelqu'un a une solution facile et en profondeur unicode application de la ressource, j'aimerais avoir quelques liens, signets d'un site web qui est dédié à ça, mais me semble que c'est maintenant disparu.
MODIFIER
- Je fournir à l'ensemble du code, j'ai l'intention de l'utiliser comme une fonction de DLL mais rien jusqu'à présent est retourné.
#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;
}
OriginalL'auteur user780756 | 2013-09-28
Vous devez vous connecter pour publier un commentaire.
L'approche la plus simple est de déclarer la chaîne différemment en premier lieu:
Si vous insistez, en utilisant des tableaux de
wchar_t
directement, vous pouvez utiliserwcscpy()
ou mieuxwcsncpy()
de<cwchar>
:1024
est le nombre maximum de caractères à copier. Je ne vois pas de quelle manière l'utilisation dewcsncpy()
est faux. Si elle est utiliséewcscpy()
il y aurait une chance pour copier plus de caractères qu'il y a de l'espace.Oui, j'ai vérifié que. Je ne suis pas utilisé pour les fonctions C, que j'utilise rarement. +1
Qui en-tête(s) ne wcscpy() et wcsncpy() faut-il inclus?
un
std::
préfixe) et<wchar.h>
sans (j'ai mis à jour la réponse).est déclaré dans
<string>
.OriginalL'auteur Dietmar Kühl
de l'initialisation de la matrice comme
mais
est une mission qui u ne peut pas faire de tableaux. u copier le contenu de la nouvelle chaîne de caractères dans votre ancien tableau:
ou si c'est un pointeur
ou nawaz suggéré avec
copy_n
wchar_t (&newstring)[] = L"Another text";
ne devrait pas compiler.je pense que je l'ai corrigé
+1. C'est génial!
BTW, pour le dernier cas :
std::copy_n(newstring, wsclen(newstring)+1, myString);
lit mieux.ty, mis à jour avec ur alternative
OriginalL'auteur Kal