consider the following code:
t[7] = "Hellow\0";
s[3] = "Dad";
//now copy t to s using the following strcpy function:
void strcpy(char *s, char *t) {
int i = 0;
while ((s[i] = t[i]) != '\0')
i++;
}
the above code is taken from “The C programming Language book”.
my question is – we are copying 7 bytes to what was declared as 3 bytes.
how do I know that after copying, other data that was after s[] in the memory
wasn’t deleted?
and one more question please: char *s is identical to char* s?
Thank you !
As you correctly point out, passing
s[3]as the first argument is going to overwrite some memory that could well be used by something else. At best your program will crash right there and then; at worst, it will carry on running, damaged, and eventually end up corrupting something it was supposed to handle.The intended way to do this in C is to never pass an array shorter than required.
By the way, it looks like you’ve swapped
sandt; what was meant was probably this:You can now copy
s[4]intot[7]using this amendedstrcpyroutine:(edit: the length of
sis now fixed)