管理対象のC++コードを64ビットに移行しようとしています。 私はvarargsを取得する関数を持っており、System :: String変数を渡すと、正しく渡されないように見えます。 ここで問題を示すコードの簡略化である:Varargsは管理オブジェクトで64ビットで動作しませんか?
#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ビットで実行され、それはハローシャハルが表示されます。
64ビットで実行すると、HelloÇz∟■が表示されます。
私はコードに最小限の変更を加えたいと考えていますが、これをどのように修正する必要がありますか?
%s指定子はSystem :: String ^を受け入れます。私がvarargsを通過しない場合、これは完全に動作します。 これは、問題を示すためにコードを単純化したものです。私はこのコードを素敵にすることには興味がありません。私はそれが動作するように、私は '実際のコードに解決策を取ることができます。 –