strcpy的问题???

来源:百度知道 编辑:UC知道 时间:2024/05/26 09:42:16
main(){
char temp[]="china";
char str[]="cana";
strcpy(temp,str);//请问这句后temp变成什么了?
}
strcpy的原理是什么

我好象记得有个函数,设函数名为X,执行X(temp,str),temp会变成"canaa"的,有没有这个函数?

如果要输出的话,毫无疑问就是"cana",但是深究temp的内部存储却非如此,如果要问temp变成了什么,准确地说是变成了"cana\0\0"。这里的"\0"是指空操作符。由于执行完strcpy后,用printf输出只能看到"cana",是因为printf函数遇到'\0'即停止输出(不输出 '\0', '\0'作为结束的标志符号)。temp总共占用了6个字节空间,第一个'\0'是拷贝"cana"时"cana"字符串所带的结束符,第二个'\0'是系统为字符串"china"自动加上的结束符,由于"cana"占用五个字节空间,系统为"china"字符串分配的则是6个字节空间,strcpy执行的机制是用第二个参数的字符串覆盖第一个参数中对应的字符,第二个'\0'则是"cana"覆盖"china"时未被覆盖的字符,因此要说temp变成了什么,我认为是变成了"cana\0\0"。

附测试程序:
#include <stdio.h>
#include <string.h>

void main()
{
char temp[]="china";
char str[]="cana";
strcpy(temp,str);
printf("Size of temp : %d\n",sizeof(temp));
printf("Size of str : %d\n", sizeof(str));
printf("%c , %c",temp[4],temp