- /* strcpy example */
- #include
- #include
-
- int main ()
- {
- char str1[]="Sample string";
- char str2[40];
- char str3[40];
- strcpy (str2,str1);
- strcpy (str3,"copy successful");
- printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);
- return 0;
- }
- /* strncpy example */
- #include
- #include
-
- int main ()
- {
- char str1[]= "To be or not to be";
- char str2[40];
- char str3[40];
-
- /* copy to sized buffer (overflow safe): */
- strncpy ( str2, str1, sizeof(str2) );
-
- /* partial copy (only 5 chars): */
- strncpy ( str3, str2, 5 );
- str3[5] = '\0'; /* null character manually added */
-
- puts (str1);
- puts (str2);
- puts (str3);
-
- return 0;
- }
strcpy和strncpy都是C语言中的字符串拷贝函数,用于将一个字符串复制到另一个字符串数组中。它们的区别在于如下几个方面:
参数个数:strcpy只接受两个参数,即目标字符串和源字符串,而strncpy接受三个参数,分别是目标字符串、源字符串和要拷贝的最大字符数。
拷贝长度:strcpy会将源字符串中的所有字符都拷贝到目标字符串中,直到遇到空字符’\0’为止。而strncpy会拷贝指定长度的字符到目标字符串中,无论是否遇到空字符。
字符串结束标志:strcpy会自动在目标字符串的末尾添加空字符’\0’作为字符串的结束标志,确保目标字符串是一个完整的字符串。
而strncpy在以下三种情况下会在目标字符串的末尾添加空字符:
a)当源字符串长度小于等于n时,
b)当源字符串长度等于n且源字符串中包含空字符,
c)当源字符串长度大于n时,但目标字符串中已经有n个字符了。
因此,在使用strcpy时,需要保证目标字符串数组足够大以容纳源字符串的所有字符以及空字符;而在使用strncpy时,需要明确指定要拷贝的最大字符数。