关于字符串

字符串函数为应用程序提供了复制、比较、排序、格式化和转换字符串的方法,以及确定字符串中每个字符的字符类型的方法。 如果运行应用程序的操作系统支持这些字符集,则所有字符串函数都支持单字节、双字节和 Unicode 字符集。

安全警告: 错误使用字符串函数可能会导致应用程序出现安全问题。 这通常涉及缓冲区溢出,这可能允许对应用程序进行拒绝服务攻击或从攻击者注入可执行代码。 Strsafe 函数支持更安全地处理字符串,建议为应用程序提高安全性。 有关这些函数的详细信息,请参阅 使用 Strsafe.h 函数

本部分讨论以下主题。

与 C Run-Time 字符串函数的比较

许多字符串函数复制或增强标准 C 运行时 (CRT) 库中熟悉的字符串函数。 许多增强功能使字符串函数能够使用 Unicode 或扩展字符集。 下表显示了 CRT 函数、支持 Unicode 的 Windows 函数 ((与 CRT 函数) 不同)和 StrSafe 函数。

CRT 字符串函数 Windows 字符串函数 StrSafe 函数
strcat lstrcat
StringCchCat
StringCchCatEx
StringCbCat
StringCbCatEx
strcmp lstrcmp (没有等效函数)
strcpy lstrcpy
StringCchCopy
StringCchCopyEx
StringCbCopy
StringCbCopyEx
strlen lstrlen
StringCchLength
StringCbLength

 

例如, strlen 函数始终返回字符串中的字节数,但 lstrlen 函数返回 TCHAR 值的数目,这指的是函数的 ANSI 版本的字节数或 Unicode 版本的 WCHAR 值。

以下字符串函数不同于标准 C 函数(例如 tolowertoupper ),因为它们对字符集中的任何字符进行操作。 例如,通过使用 CharLower 函数,应用程序可以将带有 umlaut (Ü) 的大写 U 转换为小写 (ü) 。 有关字符集的详细信息,请参阅 单字节字符集

函数 说明
CharLower 将字符或字符串转换为小写。
CharLowerBuff 将字符串转换为小写。
CharNext 移动到字符串中的下一个字符。
CharPrev 移动到字符串中的上一个字符。
CharUpper 将字符或字符串转换为大写。
CharUpperBuff 将字符串转换为大写。

 

以下字符串函数根据用户选择的语言的语义确定字符。 这些函数已启用 Unicode。

函数 说明
IsCharAlpha 确定字符是否按字母顺序排列。
IsCharAlphaNumeric 确定字符是否为字母数字。
IsCharLower 确定字符是否为小写。
IsCharUpper 确定字符是否为大写。

 

下表显示了标准 C 运行时的 Unicode 扩展 (CRT) 函数。 如前所述,StrSafe 函数可实现更安全的字符串处理,建议为应用程序提高安全性。

标准 CRT 函数 字符串函数 StrSafe 函数
sprintf wsprintf
StringCchPrintf
StringCchPrintfEx
StringCbPrintf
StringCbPrintfEx
vsprintf wvsprintf
StringCchVPrintf
StringCchVPrintfEx
StringCbVPrintf
StringCbVPrintfEx

 

字符串资源

在资源中维护字符串的应用程序可以以最少的工作量翻译成新语言。 无需在源模块中搜索字符串,只需转换资源文件中的字符串并重新链接应用程序即可。 此外,使用字符串资源可简化从同一源文件创建应用程序的 Unicode 和非 Unicode 版本。

LoadString 函数从应用程序的可执行文件加载字符串资源。 FormatMessage 函数加载字符串资源,并解释可能嵌入到字符串中的格式设置选项。

二进制形式的资源以 Unicode 格式存储。 加载资源时,应用程序可以使用 LoadStringW (资源函数的 Unicode 版本,例如) 获取 Unicode 数据形式的资源。

对于 16 位字符串资源,最大长度为 255 个字符。 对于 32 位字符串资源,最大长度为 65535 个字符。