2011-04-25 4 views
0

J'essaye de copier des caractères d'un System :: String^à un tableau de caractères rectangulaire.Comment obtenir une chaîne^dans un tableau 2d char?

D'abord, j'essayé: (avec un autre code ne correspondant à la question.)

char name[25][21]; 

... 

void savedata(int x, System::String^a){ //x is the student #, a is the name 
    int b; 
    using namespace System::Runtime::InteropServices; // for class Marshal 
    char* buffer((char*)(void*)Marshal::StringToHGlobalAnsi(a)); 
    x--; //So we write buffer[b] at data[0][b] when int x is 1 
    for(b = 0; b < 21; b++){ 
     data[x][b] = buffer[b]; 
    }; 
} 

et quand j'essayé de courir et de le déboguer, « Une exception non gérée du type « System.AccessViolationException » » s'est-il passé?

Existe-t-il un moyen plus facile de placer un String^dans un tableau char (2 dimensions), et sinon, que fais-je de mal ici?

Répondre

0

Vous devez appeler le .ToPointer() pour convertir le résultat de StringToHGlobalAnsi en quelque chose que vous pouvez ensuite convertir en char*.

Vous devez également appeler FreeHGlobal sur le résultat de StringToHGlobalAnsi (ou vous pouvez recréer un IntPtr de votre char*).

Questions connexes