Как получить строку ^ в массив 2d символов?

#visual-c

#visual-c

Вопрос:

Я пытаюсь скопировать символы из System::String ^ в прямоугольный массив символов.

Сначала я попробовал: (вместе с некоторым другим кодом. не имеет отношения к вопросу)

 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];
    };
}
  

и когда я попытался запустить и отладить его, «Необработанное исключение типа ‘System.Произошло AccessViolationException'»

Есть ли какой-нибудь более простой / усовершенствованный способ поместить строку ^ в (двумерный) массив символов, и если нет, то что я здесь делаю не так?

Ответ №1:

Вы должны вызывать .ToPointer() для преобразования результата StringToHGlobalAnsi во что-то, к чему вы можете затем привести char* .

Вы также должны вызвать FreeHGlobal результат StringToHGlobalAnsi (или вы можете воссоздать IntPtr из своего char* ).