拿strcpy为例。
原型:char * strcpy ( char * destination, const char * source );
说明:将 source 的内容复制给 destination,需要保证 destination 足够容纳 source 的内容。
返回值:返回 destination。
————————————————
发现这个()里面有个const char * source,这里有个问题了,const中,关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我这里调用函数时难道只能把一个“字符串常数”赋给const char * source吗?
比如
#include <stdio.h>
#include <string.h>
int main()
{
char str1[256];
gets(str1);
strcpy(str1, "I am your father.");
printf("%s", str1);
return 0;
}
这种显然没问题。
然而我不是赋一个字符串常量呢:
#include <stdio.h>
#include <string.h>
int main()
{
char str1[256],str2[256];
gets(str1);
gets(str2);
strcpy(str1, str2);
printf("%s", str1);
return 0;
}
会发现这也是对的。
但str2不是一个字符串常量啊?他明明可以被任意赋值!
原因:
int a=5;
int *p=&a;
int* const n=&a;
*p=8;
这段代码是对的;
类似于这段代码,上面的str2被传回strcpy函数,
char * strcpy ( char * destination, const char * source );
source指向str2的首地址,这是永远不会变的,无论对str2怎么赋值,他的首地址都不变。所以我们可以在str2的开辟的地址区域内随意赋值,比如我的str2[256]={a,b,c,d};没有任何问题。