学习C语言中的Strcpy()函数

1,502 阅读3分钟

在本指南中,我们将讨论如何在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()函数正常运行以避免出现内存溢出等错误是很好的。