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

前端 未结 3 2044
無奈伤痛
無奈伤痛 2020-11-27 22:42

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?

相关标签:
3条回答
  • 2020-11-27 23:34

    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.

    0 讨论(0)
  • 2020-11-27 23:40

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

    0 讨论(0)
  • 2020-11-27 23:48

    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;
    }
    
    0 讨论(0)
提交回复
热议问题