lstrcpynA 関数 (winbase.h)

指定した文字数をソース文字列からバッファーにコピーします。

警告 は使用しないでください。 代わりに StringCchCopy を使用することを検討してください。 「解説」を参照してください。
 

構文

LPSTR lstrcpynA(
  [out] LPSTR  lpString1,
  [in]  LPCSTR lpString2,
  [in]  int    iMaxLength
);

パラメーター

[out] lpString1

種類: LPTSTR

コピーされた文字を受け取る宛先バッファー。 バッファーは、iMaxLength で指定された TCHAR 値の数を格納するのに十分な大きさである必要があります。終端の null 文字のスペースも含まれます。

[in] lpString2

型: LPCTSTR

関数が文字をコピーするソース文字列。

[in] iMaxLength

型: int

lpString2 が指す文字列から lpString1 が指すバッファーにコピーされる TCHAR 値の数 (終端の null 文字を含む)。

戻り値

種類: LPTSTR

関数が成功した場合、戻り値はバッファーへのポインターです。 ソース文字列が iMaxLength 文字より大きい場合でも、関数は成功します。

関数が失敗した場合、戻り値は NULL で、 lpString1 は null で終了しない可能性があります。

解説

lpString1 が指すバッファーは、終端の null 文字を含めるのに十分な大きさである必要があり、iMaxLength で指定された文字列長の値には、終端の null 文字のスペースが含まれています。

lstrcpyn 関数は、ソース バッファーとコピー先バッファーが重複する場合に未定義の動作をします。

セキュリティの警告

この関数を誤って使用すると、アプリケーションのセキュリティが損なわれる可能性があります。 この関数は、構造化例外処理 (SEH) を使用して、アクセス違反やその他のエラーをキャッチします。 この関数は、SEH エラーをキャッチすると、文字列を null で終了せず、呼び出し元にエラーを通知せずに NULL を返します。 呼び出し元は、十分な領域がエラー状態であると見なしても安全ではありません。

lpString1 が指すバッファーが、コピーした文字列を格納するのに十分な大きさでない場合は、バッファー オーバーランが発生する可能性があります。 文字列全体をコピーする場合、 sizeof はバイト数を返します。 たとえば、lpString1 が としてTCHAR szString[100]宣言されているバッファー szString1 を指している場合、sizeof(szString1) は WCHAR ではなくバイト単位でバッファーのサイズを指定します。これにより、Unicode バージョンの関数のバッファー オーバーフローが発生する可能性があります。

バッファー オーバーフローの状況は、アプリケーションの多くのセキュリティ問題の原因であり、アクセス違反が発生した場合にアプリケーションに対するサービス拒否攻撃を引き起こす可能性があります。 最悪の場合、バッファー オーバーランにより、特に lpString1 がスタック ベースのバッファーである場合に、攻撃者が実行可能コードをプロセスに挿入する可能性があります。

を使用すると sizeof(szString1)/sizeof(szString1[0]) 、バッファーの適切なサイズが得られます。

代わりに StringCchCopy を使用することを検討してください。をStringCchCopy(buffer, sizeof(buffer)/sizeof(buffer[0]), src);buffer使用します。ポインターではないか、 を使用StringCchCopy(buffer, ARRAYSIZE(buffer), src);する必要があることに注意してください。ポインターにコピーする場合、呼び出し元は、ポイント先のメモリのサイズを文字で渡す責任があることに注意してください。

続行する前に、「セキュリティに関する考慮事項: Windows ユーザー インターフェイス」を確認してください。

注意

winbase.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして lstrcpyn を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

概念

リファレンス

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength

文字列

lstrcmp

lstrcmpi

lstrlen