c - 分配字符串与分配结构的字段
问题描述
所以我知道如果你有两个字符串,你需要 strcpy 将一个分配给另一个,你不能使用 =。但是说你有一个像这样的结构
typedef struct{
char name[15];
int age;}person;
你有
person q,f;
q=f;
这会将 f 的所有字段分配给 q。但是里面有一个字符串 f.name。这是如何运作的?那里的字符串不应该引起问题。我是编码新手,这让我有点困惑。
解决方案
每个字段都填充了一个等于源结构中相应字段的值。
例如,它可以使用
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.name
或q.name
(在赋值之后)对另一个没有影响。但是,请考虑如果您有以下情况会发生什么:
typedef struct {
char *name;
int age;
} Person2;
同样,(仅)制作了一个字段对字段的副本,您最终会在两个结构中得到相同的指针(指向同一个对象)。
推荐阅读
- html - 在 WKWebView 中加载 html 文本
- accessibility - jsx-a117 lint 错误“自动完成属性的格式不正确”
- sql - 对象关闭时不允许 ADODB.Connection 操作
- python-3.x - Python 递归函数的限制(进程以退出代码 139 结束)
- python - Keras Conv2D - ValueError:层顺序的输入0与层不兼容::预期的min_ndim = 4,发现ndim = 3
- c - C 中的重复代码不适用于大量数字
- python - 学习 python - 希望显示从数据库加载到 gui 中的结果
- swift - 如何从 macOS Swift 上的文档目录加载图像?
- reactjs - 在 Redux 中处理数据传递的正确方法是什么
- arcore - 有没有办法将 ARCore 用于基于投影的 AR?