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 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |
另请参阅
概念性
引用