Я пытаюсь перевести некоторый управляемый код c ++ на 64 бита.
У меня есть функция, которая получает varargs, и когда я передаю ей переменную System :: String, кажется, что она не проходит правильно.
Вот упрощение кода, который показывает проблему:
#include <stdio.h>
#include <stdarg.h>
void test(char* formatPtr, ...)
{
va_list args;
int bufSize;
char buffer[2600];
/////////////////////////////////////
//parse arguments from function stack
/////////////////////////////////////
va_start(args, formatPtr);
bufSize = vsprintf(buffer, (const char*) formatPtr, args);
printf(buffer);
va_end(args);
}
void main() {
System::String^ s;
s = "Shahar";
test("Hello %s", s);
getchar();
}
Когда этот код выполняется в 32 битах, он отображает Hello Shahar.
Когда он работает в 64 битах, он отображает Hello Çz∟⌠ ■.
Если я хочу внести наименьшее количество изменений в код, как мне это исправить?