It’s mostly about memory access. Modern languages throw errors if, for example, you try to reference an element of an array that is “outside the bounds” of the array. C does not - it gladly returns whatever memory address is past the end of the array. So the programmer has to check that the index is 0 <= x < array_size whenever they access a an array entry. That’s a pain - so they don’t.
It’s mostly about memory access. Modern languages throw errors if, for example, you try to reference an element of an array that is “outside the bounds” of the array. C does not - it gladly returns whatever memory address is past the end of the array. So the programmer has to check that the index is
0 <= x < array_size
whenever they access a an array entry. That’s a pain - so they don’t.