提问人:exsnake 提问时间:10/13/2014 最后编辑:ks1322exsnake 更新时间:5/6/2021 访问量:21093
string.h 中的 strupr() 和 strlwr() 是 ANSI 标准的一部分吗?
Are strupr() and strlwr() in string.h part of the ANSI standard?
答:
5赞
Vlad from Moscow
10/13/2014
#1
这些函数不是 C 标准函数。因此,无论它们是否受支持,都是由实现定义的。
16赞
Michael Burr
10/13/2014
#2
它们是 Microsoft C 库中的非标准函数。此后,MS 弃用了它们,转而支持重命名的函数,并且:_strlwr()
_strupr()
请注意,MS 文档声称它们是 POSIX 函数,但据我所知,它们从来都不是。
如果您需要在非 MS 工具链上使用它们,它们很容易实现。
char* strlwr(char* s)
{
char* tmp = s;
for (;*tmp;++tmp) {
*tmp = tolower((unsigned char) *tmp);
}
return s;
}
评论
0赞
AJM
5/6/2021
它们也受到 gcc 的支持,即使您尝试强制遵守类似 .-std=c11
1赞
AJM
5/6/2021
关于它们是 POSIX 函数 - pubs.opengroup.org/onlinepubs/9699919799 上托管了一个可搜索的 POSIX.1-2017 在线版本 - 其中绝对没有提到它们。
0赞
AJM
5/6/2021
此外,您可能希望添加该代码片段,因为需要它并且需要它。#include <ctype.h>
tolower
strlwr
<string.h>
0赞
chikega
9/24/2022
_strlwr
并将在 Visual Studio 2022 中非法编译器警告 C4996(你的代码使用标记为已弃用的函数、类成员、变量或 typedef),建议改用 。_strupr
_strlwr_s
_strupr_s
0赞
Weather Vane
11/13/2023
链接的MS文档并没有声称这些是Posix函数,而是“特定于Microsoft的”。该页面根本没有提到 Posix,并且该页面在重命名函数时提到了它,并链接到带有以下备注的页面:Microsoft 重命名了 CRT 中的一些 POSIX 和 Microsoft 特定的库函数,以符合...重命名涉及 MS 和 Posix 函数,它们不属于 C sttandard。_strlwr
strlwr
2赞
R.. GitHub STOP HELPING ICE
10/13/2014
#3
这些函数不是标准的,实际上它们的签名已损坏/不可用。通常不能就地对字符串进行大小写映射,因为在大小写映射下长度可能会更改。
评论