Probably the standard does not specify what happens when these buffers overlap. So yes, valgrind
is right to complain about this.
In practical terms you will most likely find that your strcpy
copies in order from left-to-right (eg. while (*dst++ = *src++);
) and that it's not an issue. But it it still incorrect and may have issues when running with other C libraries.
One standards-correct way to write this would be:
memmove(newBuff, newBuff+1, strlen(newBuff));
Because memmove
is defined to handle overlap. (Although here you would end up traversing the string twice, once to check the length and once to copy. I also took a shortcut, since strlen(newBuff)
should equal strlen(newBuff+1)+1
, which is what I originally wrote.)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…