在本指南中,我们将讨论如何在C语言中使用strcpy()函数。strcpy()函数是C语言标准库的一部分,用于执行字符串复制操作。它被包含在string.h头文件中,在使用该函数之前需要导入。
基本用法
strcpy函数的语法是
char* strcpy(char* dest, const char* src);
它是如何工作的
strcpy()函数用于将源(src)指针所指向的字符串复制到目的(dest)。它接受两个指向char或字符数组的指针参数。该函数将源字符串中的所有字符复制到目标字符串中。该函数还将空的结束符从源字符串复制到目的地。该函数返回目标字符串的一个指针地址。
为了确保strcpy()函数不修改源字符串,源(src)参数前有一个常数修饰符。
例1
下面的简单程序演示了strcpy()函数是如何工作的。
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "C programming";
char dest[100];
printf("Source string before copy: %s \n", src);
printf("Destination string before copy: %s \n", dest);
strcpy(dest, src);
printf("Source string after copy: %s \n", src);
printf("Destination string after copy: %s \n", dest);
return 0;
}
一旦我们运行上面的程序,在执行strcpy()函数后,目标字符串的值应该保持源字符串的值。

例2
让我们再举一个例子,目的字符串已经持有一个值。例如:假设我们有一个例子程序,如。
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "C programming";
char dest[] = "Hello world from C programming";
printf("Source string before copy: %s \n", src);
printf("Destination string before copy: %s \n", dest);
strcpy(dest, src);
printf("Source string after copy: %s \n", src);
printf("Destination string after copy: %s \n", dest);
return 0;
如上例所示,目标字符串已经包含了一个字符数组。一旦我们调用strcpy()函数,其内容就会被源字符串的新值所覆盖。
因此,strcpy()函数并没有将源字符串的内容追加到目标字符串中。相反,它用新值完全覆盖了目标字符串。

例3
以下面的例子为例, 目的字符串的大小太小, 无法容纳源字符串.
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "C programming";
char dest[10];
printf("Source string before copy: %s \n", src);
printf("Destination string before copy: %s \n", dest);
strcpy(dest, src);
printf("Source string after copy: %s \n", src);
printf("Destination string after copy: %s \n", dest);
return 0;
}
如果你运行上面的程序,它不会崩溃。然而,正如你所看到的,目标字符串的大小太小,无法容纳源字符串。
由于strcpy()函数没有检查目标字符串的大小是否足以存储源字符串,它将开始复制字符串,直到它到达空结束符。这将导致程序溢出并覆盖可能用于其他变量的内存位置。
在我们上面的例子中,这将导致程序覆盖源字符串本身,产生如图所示的输出。

例4
另一个常见的错误是将一个字符串字头传递给strcpy()函数作为目标字符串。
比如说。
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "C programming";
printf("Source string before copy: %s \n", src);
strcpy(" ", src);
printf("Source string after copy: %s \n", src);
return 0;
}
上面的例子程序会引起错误,程序会因分段故障而崩溃。
结束
在这个快速教程中,我们讨论了你可以使用C语言的strcpy()函数将一个字符串从源头复制到目的地的各种情况。确保strcpy()函数正常运行以避免出现内存溢出等错误是很好的。