将一个结构集中的一个值复制到另一个结构但是相同的数据类型

时间:2013-06-18 00:13:43

标签: c struct

所以我有一个结构,我用该结构数据类型初始化了一个变量A,然后放入了一些值。但现在Ι需要获取这些值并将其放入具有相同struct数据类型的另一个变量B中。怎么能实现这个目标?

struct s_Especialidade{
    int id;
    char nome[60];  
    char descricao[60];
    struct s_Especialidade *proximo;
}; 
typedef struct s_Especialidade  Especialidade;

PESPECIALIDADE p, *array;
p->nome = &array[i]->nome; //THIS LINE GIVES THE ERROR

3 个答案:

答案 0 :(得分:1)

由于它是一个字符数组,您需要复制数组的每个元素。

strcpy(p->nome, array[i]->nome)会这样做,但为了提高安全性,请查看strncpy,您可以设置最大长度以避免超支。

答案 1 :(得分:1)

尝试这种方式:

memcpy( p->nome, array[i].nome, 60 * sizeof(char) );

或者也推广类型,选择p->nome数组中使用的类型:

memcpy( p->nome, array[i].nome, 60 * sizeof(*(p->nome)) );

这是将数组复制到另一个数组(不仅仅是字符串)的通用且安全的方法。

答案 2 :(得分:0)

要扩展推荐strcpy()的答案,我会使用memcpy()并使用#defined长度来确保您始终使用相同的值。

#define NOME_LENGTH 60    

struct s_Especialidade{
    int id;
    char nome[NOME_LENGTH];  
    char descricao[60];     
    struct s_Especialidade *proximo;
}; 
typedef struct s_Especialidade  Especialidade;

PESPECIALIDADE p, *array; 

memcpy(p->nome, array[i]->nome, NOME_LENGTH);

在考虑作业的作用时,事情变得更加复杂,但是,在示例程序中:

struct stuff {
    char buf[2];
};

int main() {
    struct stuff a;
    memcpy(a.buf, "aa", 2); // *Edit: "aa" is a bad example as it 
                            // actually becomes at compilation 3 bytes long 
                            // {'a','a','\0'} as noted in the comments

    struct stuff b;
    b.buf = a.buf; // *Edit: For illustrative purposes, an assignment 
                   // between two char[2] members is not correct and
                   // does not compile.
}

编译产生error: incompatible types when assigning to type ‘char[2]’ from type ‘char *’行的错误b.buf = a.buf

指针和数组的主题已在其他地方讨论过,Is an array name a pointer?等等。

*编辑:如评论中所述,在上述代码中,如果不是b.buf = a.buf;结构分配b = a;,则会正确复制内部成员。这是因为struct to struct assignment实际上是memcpy(&b, &a, sizeof(b));Assign one struct to another in C