所以我有一个结构体,我用该结构体数据类型初始化了一个变量A,然后Ι放入一些值。但现在Ι需要将这些值放入另一个具有相同结构数据类型的变量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发布于 2013-06-18 08:18:02
因为它是一个字符数组,所以您需要复制该数组的每个元素。
strcpy(p->nome, array[i]->nome)可以做到这一点,但为了获得额外的安全性,请查看strncpy,您可以在其中设置最大长度以避免溢出。
发布于 2013-06-18 08:31:47
尝试这样做:
memcpy( p->nome, array[i].nome, 60 * sizeof(char) );或者也可以泛化类型,选择p->nome数组中使用的类型:
memcpy( p->nome, array[i].nome, 60 * sizeof(*(p->nome)) );这是将一个数组复制到另一个数组(不仅仅是字符串)的通用且安全的方法。
发布于 2013-06-18 08:48:06
为了扩展推荐strcpy()的答案,我将使用memcpy()并使用#定义的长度,以确保您始终使用相同的值。
#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.
}编译会产生b.buf = a.buf行的错误error: incompatible types when assigning to type ‘char[2]’ from type ‘char *’。
指针和数组的主题已经在其他地方讨论过了,其中包括Is an array name a pointer?。
*编辑:正如注释中所指出的,在上面的代码中,如果不是b.buf = a.buf;结构赋值b = a;,内部成员将被正确复制。这是因为结构到结构赋值是有效的memcpy(&b, &a, sizeof(b)); (Assign one struct to another in C)。
https://stackoverflow.com/questions/17158797
复制相似问题