lstrcpyA 函数 (winbase.h)
将字符串复制到缓冲区。
语法
LPSTR lstrcpyA(
[out] LPSTR lpString1,
[in] LPCSTR lpString2
);
参数
[out] lpString1
类型:LPTSTR
一个缓冲区,用于接收由 lpString2 参数指向的字符串的内容。 缓冲区必须足够大才能包含字符串,包括终止 null 字符。
[in] lpString2
类型:LPTSTR
要复制的以 null 结尾的字符串。
返回值
类型:LPTSTR
如果函数成功,则返回值为指向缓冲区的指针。
如果函数失败,则返回值 NULL,lpString1 可能不会以 null 结尾。
言论
使用系统的双字节字符集(DBCS)版本,此函数可用于复制 DBCS 字符串。
如果源缓冲区和目标缓冲区重叠,lstrcpy 函数具有未定义的行为。
安全备注
正确使用此函数可能会损害应用程序的安全性。 此函数使用结构化异常处理(SEH)捕获访问冲突和其他错误。 当此函数捕获 SEH 错误时,它将返回 NULL,而不终止字符串,并且不通知调用方错误。 调用方无法安全地假定空间不足是错误条件。lpString1 必须足够大,才能容纳 lpString2 和结束“\0”,否则可能会出现缓冲区溢出。
缓冲区溢出情况是应用程序中出现许多安全问题的原因,如果发生访问冲突,可能会对应用程序造成拒绝服务攻击。 在最坏的情况下,缓冲区溢出可能会允许攻击者将可执行代码注入进程,尤其是在 lpString1 是基于堆栈的缓冲区时。
请考虑改用 StringCchCopy;使用 StringCchCopy(buffer, sizeof(buffer)/sizeof(buffer[0]), src);
,请注意 buffer
不能是指针,也不能使用 StringCchCopy(buffer, ARRAYSIZE(buffer), src);
,请注意,复制到指针时,调用方负责传入指向内存的大小(以字符为单位)。
注意
winbase.h 标头将 lstrcpy 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | 窗户 |
标头 | winbase.h (包括 Windows.h) |
库 | Kernel32.lib |
DLL | Kernel32.dll |
另请参阅
概念
参考