首页 > 解决方案 > 分配字符串与分配结构的字段

问题描述

所以我知道如果你有两个字符串,你需要 strcpy 将一个分配给另一个,你不能使用 =。但是说你有一个像这样的结构

typedef struct{
char name[15];
int age;}person;

你有

person q,f;
q=f;

这会将 f 的所有字段分配给 q。但是里面有一个字符串 f.name。这是如何运作的?那里的字符串不应该引起问题。我是编码新手,这让我有点困惑。

标签: c

解决方案


每个字段都填充了一个等于源结构中相应字段的值。

例如,它可以使用

memcpy(&q, &f, sizeof(struct person));

这意味着以下内容是完全合法的:

#include <stdio.h>

typedef struct {
   char name[15];
   int age;
} Person;

int main(void) {
   Person f = { "abc", 30 };
   Person q;
   q = f;
   printf("%s\n", q.name);  // abc
   printf("%d\n", q.age);   // 30
}

(我发现对类型使用大写很有用。然后,你可以这样做Person person;。)

(请注意,我必须f在执行分配之前进行初始化以避免未定义的行为。)


在上面,改变f.nameq.name(在赋值之后)对另一个没有影响。但是,请考虑如果您有以下情况会发生什么:

typedef struct {
   char *name;
   int age;
} Person2;

同样,(仅)制作了一个字段对字段的副本,您最终会在两个结构中得到相同的指针(指向同一个对象)。


推荐阅读