Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将具有多个数组的此结构复制到另一个临时结构?_Arrays_C_Struct_Copy_Memcpy - Fatal编程技术网

Arrays 如何将具有多个数组的此结构复制到另一个临时结构?

Arrays 如何将具有多个数组的此结构复制到另一个临时结构?,arrays,c,struct,copy,memcpy,Arrays,C,Struct,Copy,Memcpy,我需要编写一个函数void findBoursiers(void),该函数需要执行以下任务: 复制包含6名学生的struct student m_stuTab[STU_NB]的内容 各自 a) 学生的姓名(name[MAX\u name]) b) 文件编号(fileNumber[NB\u位]) c) 比分 我需要将所有这些内容复制到名为struct student temp\u stuTab[STU\u NB]的临时结构中(该结构是在void findBoursiers(void)中创建的)

我需要编写一个函数
void findBoursiers(void)
,该函数需要执行以下任务:

  • 复制包含6名学生的
    struct student m_stuTab[STU_NB]
    的内容 各自

    a) 学生的姓名(
    name[MAX\u name]

    b) 文件编号(
    fileNumber[NB\u位]

    c) 比分

  • 我需要将所有这些内容复制到名为
    struct student temp\u stuTab[STU\u NB]
    的临时结构中(该结构是在
    void findBoursiers(void)
    中创建的)

  • 我需要取
    struct student temp_stuTab[STU_NB]
    的内容,然后从最好到最差依次取得分最高的3名学生。我将它们与for循环进行比较,想象一下

  • 将这3名学生放入一个名为
    charm\u boursiers[3][MAX\u NAME]
    的数组中

  • 我不需要更改
    main()中的以下代码

    我知道这在
    for
    循环、
    strcpy
    等方面是可行的,但我想知道是否有更有效的方法来实现这一点。可能是类似于
    memcpy
    的过程?我对编码相当陌生,如果我的问题很难理解,我很抱歉。非常感谢

     student temp_stuTab = student m_stuTab
    
    现在我明白了真正的问题。C和C++在这里不同,但在任何情况下都是错误的。 C:

    C++:

    C++将以C的方式接受它,但这是一种糟糕的样式,除非您将结构命名为与变量相同的结构(这是一种糟糕的样式,原因不同)

    现在我明白了真正的问题。C和C++在这里不同,但在任何情况下都是错误的。 C:

    C++:


    C++将以C的方式接受它,但除非将结构命名为与变量相同的结构,否则它是错误的样式(由于不同的原因,它是错误的样式)。

    要复制结构数组,请使用
    for
    循环和简单赋值:

    struct student m_stuTab[NB_STU];
    struct student temp_stuTab[NB_STU];
    
    for (size_t i = 0; i < NB_STU; i++) {
        temp_stuTab[i] = m_stuTab[i];
    }
    

    <>但它不会调用C++构造函数或C++中赋值重载函数,大小容易计算错误。如果可能,好的编译器将为这两种方法生成相同的代码。

    要复制结构数组,请使用
    for
    循环和简单分配:

    struct student m_stuTab[NB_STU];
    struct student temp_stuTab[NB_STU];
    
    for (size_t i = 0; i < NB_STU; i++) {
        temp_stuTab[i] = m_stuTab[i];
    }
    

    <>但它不会调用C++构造函数或C++中赋值重载函数,大小容易计算错误。如果可能,好的编译器将为这两种方法生成相同的代码。

    我认为,您所指的“类似于memcpy的过程”就是您想要的。在C++语言中,它通常被用作 STD::MeMCPY 。可以用良好的旧代码< > <代码>复制类和结构。code>student
    和它们一样微不足道。@user4581301那么你是说我只需要写
    student temp\u stuTab=student m\u stuTab
    ?因为当我试着在函数中写这个时,它会给我一个错误,说未定义的标识符“student”。这是我第一次使用struct,所以我并不十分清楚,只是
    student temp_stuTab=m_stuTab
    复制一个结构,或者
    temp_stuTab[i]=m_stuTab[i]
    (在循环中)顺序复制数组的每个元素。但是
    memcpy
    将一举完成。嘿!谁偷了C++标签?该死!链接到C++文档的主题已经过时了。我想,你所说的“类似于MeMcPy的过程”就是你想要的。在C++语言中,它通常被用作 STD::MeMCPY 。可以用良好的旧代码< > <代码>复制类和结构。code>student和它们一样微不足道。@user4581301那么你是说我只需要写
    student temp\u stuTab=student m\u stuTab
    ?因为当我试着在函数中写这个时,它会给我一个错误,说未定义的标识符“student”。这是我第一次使用struct,所以我并不十分清楚,只是
    student temp_stuTab=m_stuTab
    复制一个结构,或者
    temp_stuTab[i]=m_stuTab[i]
    (在循环中)顺序复制数组的每个元素。但是
    memcpy
    将一举完成。嘿!谁偷了C++标签?该死!链接到C++文档的话题已经过时了。
     student temp_stuTab;
     temp_stuTab = m_stuTab;
    
    struct student m_stuTab[NB_STU];
    struct student temp_stuTab[NB_STU];
    
    for (size_t i = 0; i < NB_STU; i++) {
        temp_stuTab[i] = m_stuTab[i];
    }
    
    memcpy(temp_stuTab, m_stuTab, sizeof(*temp_stuTab) * NB_STU);