次の方法で共有


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 が指す文字列から、終端の null 文字を含む lpString1が指すバッファーにコピーされる TCHAR数。

戻り値

型: LPTSTR

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

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

備考

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

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

セキュリティの警告

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

lpString1 指すバッファーが、コピーされた文字列を格納するのに十分な大きさでない場合は、バッファー オーバーランが発生する可能性があります。 文字列全体をコピーする場合、sizeof はバイト数を返します。 たとえば、lpString1 が、として宣言されている 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 を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winbase.h (Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

概念

リファレンス

StringCbCopy の

StringCbCopyEx の

StringCbCopyN の

StringCbCopyNEx の

StringCbLength

StringCchCopy

StringCchCopyEx の

StringCchCopyN の

StringCchCopyNEx

StringCchLength

文字列の

lstrcmp を する

lstrcmpi を する

lstrlen を する