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 字符,该函数也可以成功。

如果函数失败,则返回值为 NULLlpString1 可能不会以 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)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

概念性

引用

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength

字符串

lstrcmp

lstrcmpi

lstrlen