LPCTSTRは、TCHARへのポインター、つまり文字列へのポインターです。提供するコードスニペットでは、メモリのランダムな領域を指し、初期化されていないポインタを逆参照することでメモリのランダムな領域にアクセスしているため、コードの実行は未定義の動作です。
代わりにこのコードを試してください:
TCHAR PortString[64];
int ComPortNumber;
/* assign some value to ComPortNumber here */
_sntprintf_s(
PortString, // The buffer for the output
sizeof(PortString)/sizeof(TCHAR), // The number of TCHARs in the buffer
_TRUNCATE, // How to handle overflows
_T("COM%d"), // The format string
ComPortNumber); // And the port number, finally!
呼び出しと型のバリアントを使用して、T
コードがANSI / MBCSモードとUNICODEモードの両方でコンパイルされるようにし、の新しい「安全な」バリアントを_sntprintf
使用して、バッファーのオーバーランの可能性を減らしました。
_sntprintf_s
実際の製品コードでは、呼び出しからのリターンアドレスにエラーがないか確認する必要があります。
最後のポイント:スタックベースであるため、この関数を呼び出した人に戻らないように注意してください。この関数が終了すると、バッファーが消えます。PortString
これを行うと、運が良ければデバッグ/テスト中にプログラムがクラッシュします。運が悪ければ、正しく機能しているように見えるかもしれませんが、時を刻む時限爆弾になります。