C语言 中,字符串本质上就是一个以空字符 '\0' 结尾的 char 数组。要复制字符串,不能使用赋值语句(=),因为数组名是常量指针,不能直接赋值。应该使用专门的函数,如 strcpy()、strncpy(),或者手动复制。

1、使用 strcpy()

strcpy(dest, src) 会把 src 字符串(包括结尾的 \0)复制到 dest。目标数组 dest 必须有足够空间,否则会导致缓冲区溢出。

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, world!";
    char dest[50];  // 目标数组需要有足够的空间

    strcpy(dest, src);  // 复制字符串
    printf("Copied string: %s\n", dest);

    return 0;
}

2、使用 strncpy()(更安全)

strncpy() 会最多复制指定的字节数。如果源字符串太长,不会自动添加 '\0',所以需要手动设置末尾字符。

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, world!";
    char dest[20];

    strncpy(dest, src, sizeof(dest) - 1);
    dest[sizeof(dest) - 1] = '\0';  // 手动添加终止符,确保安全
    printf("Copied string: %s\n", dest);

    return 0;
}

3、手动复制字符

可以通过循环逐个字符复制。

#include <stdio.h>

int main() {
    char src[] = "Hello, world!";
    char dest[50];
    int i = 0;

    while ((dest[i] = src[i]) != '\0') {
        i++;
    }

    printf("Copied string: %s\n", dest);

    return 0;
}

4、不确定长度大字符串复制

如不确定字符串的长度,请始终分配足够的空间或使用动态内存分配。对于大字符串或者在堆上操作的字符串,可以使用 malloc() + strcpy()

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char *src = "Dynamic string";
    char *dest = malloc(strlen(src) + 1);

    if (dest) {
        strcpy(dest, src);
        printf("Copied string: %s\n", dest);
        free(dest);
    }

    return 0;
}