#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*
).