【发布时间】:2014-12-07 07:10:49
【问题描述】:
我在互联网上寻找这个,在每个地方都有 string.h 的功能,没有提到这两个。
是因为什么?它们不在每个编译器中?
【问题讨论】:
-
相关(如果不是重复的话):stackoverflow.com/q/23618316/694576
我在互联网上寻找这个,在每个地方都有 string.h 的功能,没有提到这两个。
是因为什么?它们不在每个编译器中?
【问题讨论】:
这些函数不是 C 标准函数。因此,是否支持它们是由实现定义的。
【讨论】:
它们是来自 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;
}
【讨论】:
-std=c11 之类的东西强制遵守标准。
#include <ctype.h>,因为 tolower 需要它,而 strlwr 需要 <string.h>。
这些函数不是标准的,实际上它们的签名已损坏/无法使用。一般来说,您不能就地对字符串进行大小写映射,因为在大小写映射下长度可能会发生变化。
【讨论】: