MST

星途 面试题库

面试题:C++中strcpy与memcpy在复杂数据类型复制中的应用

定义一个结构体,结构体中包含字符串成员以及其他基本数据类型成员。现在需要将一个结构体实例的数据复制到另一个结构体实例。请说明能否直接使用strcpy或memcpy,如果不能,原因是什么,如果能,在使用过程中需要注意什么。
20.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 能否直接使用strcpy
    • 不能直接使用strcpy
    • 原因:strcpy主要用于字符串之间的复制,而结构体不仅包含字符串成员,还有其他基本数据类型成员,strcpy无法完整地复制整个结构体的所有成员数据。
  2. 能否直接使用memcpy
    • 能使用memcpy
    • 使用注意事项:
      • 结构体中不能含有指针类型成员指向动态分配的内存(除非你清楚知道自己在做什么并能正确处理内存释放等问题)。因为memcpy只是单纯按字节复制,如果结构体中有指针指向动态分配内存,复制后两个结构体的指针指向同一块内存,可能导致内存释放错误(如重复释放、悬挂指针等问题)。
      • 要确保目标结构体和源结构体具有相同的内存布局,并且目标结构体的内存空间足够容纳源结构体的所有数据,否则会导致内存越界错误。例如:
#include <stdio.h>
#include <string.h>

// 定义结构体
typedef struct {
    char name[20];
    int age;
    double score;
} Student;

int main() {
    Student s1 = {"Tom", 20, 85.5};
    Student s2;
    // 使用memcpy复制结构体
    memcpy(&s2, &s1, sizeof(Student));
    printf("s2 name: %s, age: %d, score: %lf\n", s2.name, s2.age, s2.score);
    return 0;
}

在这个例子中,Student结构体没有指针类型成员,memcpy能正确复制整个结构体数据。