首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个值从一个结构阵营复制到另一个相同数据类型的结构中

将一个值从一个结构阵营复制到另一个相同数据类型的结构中
EN

Stack Overflow用户
提问于 2013-06-18 08:13:43
回答 3查看 221关注 0票数 0

所以我有一个结构体,我用该结构体数据类型初始化了一个变量A,然后Ι放入一些值。但现在Ι需要将这些值放入另一个具有相同结构数据类型的变量B中。Ι如何做到这一点呢?

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2013-06-18 08:18:02

因为它是一个字符数组,所以您需要复制该数组的每个元素。

strcpy(p->nome, array[i]->nome)可以做到这一点,但为了获得额外的安全性,请查看strncpy,您可以在其中设置最大长度以避免溢出。

票数 1
EN

Stack Overflow用户

发布于 2013-06-18 08:31:47

尝试这样做:

代码语言:javascript
复制
memcpy( p->nome, array[i].nome, 60 * sizeof(char) );

或者也可以泛化类型,选择p->nome数组中使用的类型:

代码语言:javascript
复制
memcpy( p->nome, array[i].nome, 60 * sizeof(*(p->nome)) );

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

票数 1
EN

Stack Overflow用户

发布于 2013-06-18 08:48:06

为了扩展推荐strcpy()的答案,我将使用memcpy()并使用#定义的长度,以确保您始终使用相同的值。

代码语言:javascript
复制
#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);

考虑赋值的作用,事情变得更加复杂,但在一个示例程序中:

代码语言:javascript
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17158797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档