一、strcpy()函数
功能:复制字符串,在字符串中的作用等价于赋值运算符
示例代码:
/* test of strcpy() function */
#include <stdio.h>
#include <string.h>
int main(void)
{
char arr1[] = "Easy doesn't enter into grow-up life.";
char arr2[100] = "initial string";
puts(arr2);
strcpy(arr2, arr1);
puts(arr1);
puts(arr2);
}
运行结果:
strcpy()接受两个字符串指针参数:指向最初字符串的第二个指针可以是一个已经声明的指针、数组名或字符串常量;指向复制字符串的第一个指针应指向空间大到足够容纳该字符串的数据对象,比如一个数组
声明一个数组将为数组分配存储空间;而声明一个指针只为一个地址分配存储空间
1)strcpy()函数是char *类型,返回的是第一个参数的值,即一个字符的地址
2)第一个参数不需要指向数组的开始,可以只复制数组的一部分
示例代码:
/* another test of strcpy() function */
#include <stdio.h>
#include <string.h>
int main(void)
{
char arr1[] = "Easy doesn't enter into grow-up life.";
char arr2[100] = "Morning! ";
puts(arr2);
strcpy(arr2 + 9, arr1);
puts(arr1);
puts(arr2);
}
运行结果:
二、strncpy()函数
strcpy()函数和gets()函数一样,都不检查目标字符串是否容纳得下源字符串
因此使用strncpy()函数比strcpy()函数安全
strncpy()函数需要第三个参数指明最大可复制的字符数
功能:strncpy(target, source, n)函数,把第二个参数(source)的数组中的n个字符(或空字符之前的字符,由二者中最先满足的那个决定何时终止)复制到第一个参数(target)的数组中
示例代码:
/* another test of strcpy() function */
#include <stdio.h>
#include <string.h>
int main(void)
{
char arr1[] = "Easy doesn't enter into grow-up life.";
char arr2[100] = "Morning! ";
puts(arr2);
strncpy(arr2 + 9, arr1, 10);
puts(arr1);
puts(arr2);
}
运行结果:
如果源字符串的字符比n小,整个字符串都会被复制过来,包括空字符;如果原字符串还没结束就达到了限制,就不会添加空字符,导致最终的字符串可能没有空字符
因此程序设置的n比目标数组的大小要少1,这样就可以把空字符放到数组的最后一个元素中
strncpy(arr2, arr1, 10 - 1);
arr1[9] = '\0';
这样就保证存储的是一个字符串