因为C语言发明是为了写操作系统,而计算机是不需要懂什么是字符串。在C语言中,所以当年的设计者并没有设计一个好的字符串类型。
在C语言中,如果直接字符串=字符串:pts1=pst2,是不能复制字符串的,这是因为pts1本身只是一个内存地址,而不是一个真正的字符串对象(事实上,在C语言中根本就没有字符串对象)。
strcpy()函数,用于两个字符串值的复制。
(1)函数原型
char * strcpy(char * _Dest,const char * _Source);
(2)头文件
(3)功能
将从const char * _Source到'\0'结尾的字符串(包括'\0')复制到char * _Dest 所指的字符串处。 返回值char * = char * _Dest
(4)基础实例代码
char a[30] = "12345678901234567890"; char b[]="zobol"; for(int i=0;i<30;++i) { printf("%d ",a[i]);//将字符数组中的所有值都输出 } for(int i=0;i<6;++i) { printf("%d ",b[i]); } strcpy(a,b);//关键函数 for(int i=0;i<30;++i) { printf("%d ",a[i]); } printf("%s\n",a);
(5)输出情况
(6)问题1:对于char * _Dest所指向字符数组,'\0'后面的值会被替换吗?
回答:不会,这个函数只指向字符串,不会自动将后面的值填充为'\0'
(7)问题2:如果char * _Des所指向的字符数组如果空间不够大,会怎么样?
回答:C语言这个函数无法得知数组的最大容量,会强制填充,有可能会污染后面的数据,发生溢出现象。
(8)问题3:为什么不直接pts1=pts2?
回答:因为在C语言中,数组的名字不是数组的“对象”,而只是指向数组第一个元素的首地址。
a=&a[0]