4.8.3 指针和字符串(3)
strcpy( )函数接受2个参数。第一个是目标地址,第二个是要复制的字符串的地址。您应确定,分配了目标空间,并有足够的空间来存储副本。在这里,我们用strlen( )来确定所需的空间,并使用new获得可用的内存。
通过使用strcpy( )和new,将获得"fox"的两个独立副本:
另外,new在离animal数组很远的地方找到了所需的内存空间。
经常需要将字符串放到数组中。初始化数组时,请使用=运算符;否则应使用strcpy( )或strncpy( )。strcpy( )在前面已经介绍过,其工作原理如下:
注意,类似下面这样的代码可能导致问题,因为food数组比字符串小:
在这种情况下,函数将字符串中剩余的部分复制到数组后面的内存字节中,这可能会覆盖程序正在使用的其他内存。要避免这种问题,请使用strncpy( )。该函数还接受第3个参数-要复制的最大字符数。然而,要注意的是,如果该函数在到达字符串结尾之前,目标内存已经用完,则它将不会添加空字符。因此,应该这样使用该函数:
这样最多将19个字符复制到数组中,然后将最后一个元素设置成空字符。如果该字符串少于19个字符,则strncpy( )将在复制完该字符串之后加上空字符,以标记该字符串的结尾。
警告:应使用strcpy( )或strncpy( ),而不是赋值运算符来将字符串赋给数组。
您对使用C-风格字符串和cstring库的一些方面有了了解后,便可以理解为何使用C++(www.cppentry.com) string类型更为简单了:您不用担心字符串会导致数组越界,并可以使用赋值运算符而不是函数strcpy( )和strncpy( )。