strupr() and strlwr() in string.h part are of the ANSI standard?

怎甘沉沦 提交于 2019-11-26 09:14:12

问题


I was looking for this on internet and in every place with the functions of string.h these two are not mentioned.

Is because what? They aren\'t in every compiler?


回答1:


They are non-standard functions from Microsoft's C library. MS has since deprecated them in favor of renamed funcitons _strlwr() and _strupr():

  • strlwr() doc
  • strupr() doc

Note that the MS docs claim they are POSIX functions, but as far as I can tell they never have been.

If you need to use them on a non-MS toolchain, they're easy enough to implement.

char* strlwr(char* s)
{
    char* tmp = s;

    for (;*tmp;++tmp) {
        *tmp = tolower((unsigned char) *tmp);
    }

    return s;
}



回答2:


These functions are not C standard functions. So it is implementation-defined whether they are supported or not.




回答3:


These functions are not standard, and in fact their signatures are broken/non-usable. You cannot case-map a string in-place in general, because the length may change under case mapping.



来源:https://stackoverflow.com/questions/26327812/strupr-and-strlwr-in-string-h-part-are-of-the-ansi-standard

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!