2009-05-08 5 views
2

J'ai essayé wcscat() mais j'ai une violation d'accès à l'exécution.Besoin d'aide pour ajouter un wchar_t à un autre! C++

wchar_t* a = L"aaa"; 
wchar_t* b = L"bbb"; 
wchar_t* c; 
c = wcscat(a, b); 

Quelqu'un peut-il me dire ce qui ne va pas ici? Ou une autre façon de résoudre mon problème? Merci

+3

Je veux juste ajouter, si vous utilisez C++, c'est la fausse façon de faire les choses. La bibliothèque standard C++ a des objets chaîne en raison de la difficulté avec c-chaînes. – rlbond

Répondre

5

wcscat ne crée pas de nouvelle chaîne - il ajoute simplement b à a. Donc, si vous voulez vous assurer que vous ne causez pas de violation d'accès à l'exécution, vous devez vous assurer qu'il y a de la place pour b à la fin de a. Dans le cas ci-dessus:

wchar_t a[7] = L"aaa"; 
wchar_t b[] = L"bbb"; 
wchar_t* c; 
c = wcscat(a, b); 

Vous pouvez toujours obtenir une valeur de retour de la fonction, mais il retournera tout simplement a.

3

utilisation C++ est construit en wstring:

#include <string> 
using std::wstring; 

int main() 
{ 
    wstring a = L"aaa"; 
    wstring b = L"bbb"; 
    wstring c = a + b; 
} 

wcscat est pour les chaînes c-style, pas des chaînes de style C++. C façon de le faire est

wchar_t* a = L"aaa"; 
wchar_t* b = L"bbb"; 
wchar_t c[7]; 
wcscpy(c, a); 
wcscat(c, b); 

EDIT: Wow, maintenant que je l'a édité, il fait ressembler je copiais une des réponses ci-dessous.

+0

Ça devait être la bonne solution alors! :) –

1

La fonction wcscat ajoute le second argument au tampon de chaîne dans le premier argument. Il semble que cela pourrait être votre première expérience en utilisant des chaînes en C. Vous pouvez faire votre travail par exemple en procédant comme suit:

wchar_t* a = L"aaa"; 
wchar_t* b = L"bbb"; 
wchar_t c[7]; 
wcscpy(c, a); 
wcscat(c, b); 

Lors de l'utilisation des fonctions de manipulation de chaîne C, vous devez vous assurer que vous allouez suffisamment d'espace tampon pour l'opération de chaîne commence à être exécutée (l'exécution C ne le fera pas pour vous). Dans ce cas, cela signifie que le tampon c doit contenir suffisamment d'espace pour contenir la chaîne de résultats. J'ai précalculé que le résultat est de 6 caractères plus le caractère nul final, ce qui signifie que je dois allouer 7 caractères.

Questions connexes