strcmp behaviour

后端 未结 3 2019
死守一世寂寞
死守一世寂寞 2021-02-05 14:37

When I run the following code:

#include 

int main(int argc, char *argv[])
{
    int p = 0;

    p = strcmp(NULL,\"foo\");

    return 0;
}


        
相关标签:
3条回答
  • 2021-02-05 14:59

    What you are doing is undefined. strcmp requires valid pointers to null-terminated strings.

    NULL is not a pointer to a null-terminated string.

    0 讨论(0)
  • 2021-02-05 15:02

    You are probably using optimization options when compiling. Since the result of strcmp() in the second snippet is ignored the compiler eliminates this function call and this is why your program does not crash. This call can be eliminated only because strcmp() is an intrinsic function, the compiler is aware that this function does not have any side effects.

    0 讨论(0)
  • 2021-02-05 15:03

    You need to:

    • Include the proper headers, or declare functions manually. For strcmp(), you need <string.h>.
    • Not pass an invalid pointer such as NULL to strcmp(), since it doesn't protect against it and will dereference the pointer, thus causing undefined behavior in your program.
    0 讨论(0)
提交回复
热议问题