所以我有一个结构,我用该结构数据类型初始化了一个变量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
答案 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)