0

LPCTSTRに番号を追加するにはどうすればよいですか?私が使用しているライブラリは、COMポートアドレスにLPCTSTRを使用します。私はchar*でこれを行う方法を知っていますが、LPCTSTRではできません。これが私がやりたいことです(sprintfがこれらで動作すると仮定しますが、そうではないことを私は知っています)

LPCTSTR PortString;
int ComPortNumber;

sprintf(PortString,"COM%d",ComPortNumber);

これが行われると、9がComPortNumber整数に格納されている場合、LPCTSTRPortStringには「COM9」が含まれます。

4

7 に答える 7

3

tchar.hの安全なバージョンを使用できます。

TCHAR PortString[32];
int ComPortNumber;

_stprintf_s( PortString, 32, _T("COM%d"), ComPortNumber );

http://msdn.microsoft.com/en-us/library/ce3zzk1k%28VS.80%29.aspx

于 2013-02-11T23:27:41.680 に答える
2

LPCTSTRを使用するAPIは、指定された文字列を変更しないことを示すために、そのパラメーターを定数文字列として宣言しています。それでも、このAPIに非定数の文字列を渡すことができます。

だからあなたはすることができます:

CHAR PortString[32];
int ComPortNumber;

sprintf(PortString,"COM%d",ComPortNumber);
于 2013-02-11T23:24:00.807 に答える
1

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これを行うと、運が良ければデバッグ/テスト中にプログラムがクラッシュします。運が悪ければ、正しく機能しているように見えるかもしれませんが、時を刻む時限爆弾になります。

于 2013-02-11T23:31:47.290 に答える
0

LPCTSTRは単なる、const TCHAR *であり、パラメータとして受け入れるときに使用します。

代わりに、文字列を配列として割り当てることをお勧めします。また、一般的なテキストマッピングを使用します。

TCHAR PortString[20];
int ComPortNumber;

_stprintf(PortString,_T("COM%d"),ComPortNumber);

そしてtchar.hを含めます。

于 2013-02-11T23:25:15.047 に答える
0

あなたが本当にTCHARものを使いたいなら:

配列である必要があるバッファ_stprintfを埋めるために使用します。TCHAR

TCHAR PortString[32]; /* as another answer says */
于 2013-02-11T23:25:56.357 に答える
0

を作成しCString、それに何かを追加し終えたら、を呼び出してCString::operator LPCSTR() const そこから取得できLPCSTRます。

于 2013-02-11T23:26:25.987 に答える
0

LPCTSTRは、constchar*またはconstwchar_t*のいずれかのtypedefです。char *の場合と同じように実行しますが、_stprintfを使用します。

于 2013-02-11T23:28:22.330 に答える