Char array can hold more than expected

后端 未结 3 1453
猫巷女王i
猫巷女王i 2021-01-17 06:58

I tried to run this code in C and expected runtime error but actually it ran without errors. Can you tell me the reason of why this happens?

char str[10];
sc         


        
相关标签:
3条回答
  • 2021-01-17 07:43

    As soon as you read or write from an array outside of its bounds, you invoke undefined behavior.

    Whenever this happens, the program may do anything it wants. It is even allowed to play you a birthday song although it's not your birthday, or to transfer money from your bank account. Or it may crash, or delete files, or just pretend nothing bad happened.

    In your case, it did the latter, but it is in no way guaranteed.

    To learn further details about this phenomenon, read something about exploiting buffer overflows, this is a large topic.

    0 讨论(0)
  • 2021-01-17 07:43

    C doesn't perform any bounds checking on the array. This can lead to buffer overflows attack on your executable.

    The bound checking should be done at the user end to make it anti-buffer overflow.

    Instead of typing in magic numbers when taking input from fgets in an array, always use the sizeof(array) - 1 operator on the array to take in that much, -1 for leaving a space for '\0' character.

    0 讨论(0)
  • 2021-01-17 07:44

    This is a good question. And the answer
    is that it there is indeed a memory problem
    The string is read and stored from the address of str
    up until the length of the actual read string demands,
    and it exceeds the place you allocated for it.

    Now, it may be not crash immediately, or even ever for
    short programs, but it's very likely that when you expand
    the program, and define other variables, this string will
    overrun them, creating weird bugs of all kinds, and it may
    eventually also crash.

    In short, this is a real error, but it's not uncommon to have
    memory bugs like this one which do not affect at first, but
    do create bugs or crash the program later.

    0 讨论(0)
提交回复
热议问题