共用方式為


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 ,而不會終止字串,而不會通知呼叫端錯誤。 呼叫端無法安全地假設空間不足是錯誤狀況。

如果 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 標頭會將 lstrcpyn 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程式碼,可能會導致編譯或執行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

   
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 winbase.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

概念

參考

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength

字串

lstrcmp

lstrcmpi

lstrlen