|
|
|
|
|
by david-given
3695 days ago
|
|
I see they've finally changed the memcpy() specification to forbid overlapping memory areas completely. Previously, it was defined to copy from low addresses to high addresses, which meant you could use this to fill an array: p[0] = 42;
memcpy(&p[1], &p[0], sizeof(p)-sizeof(*p));
And people did. |
|
If copying takes place between objects that overlap, the behavior is undefined.
So it has been this way in C since the first official standard. I don't have a first edition K&R so I can't see what that said, though.