c - 从结构修改字符串数组
问题描述
我通常以这种方式处理字符串数组,因为它允许我不指定字符限制:
char *names[2] = {"John","Doe"};
printf("%s\n",*((names)));
printf("%s\n",*((names)+1));
使用结构时我无法重现这一点。
我尝试了john.names = {"John","Doe"};
和john.*names = {"John","Doe"}
。但是我收到了预期的表达式错误。
但是,我可以在初始化期间使用Person john = {{"John","Doe"}};
. 所以我不确定是否只允许在初始化期间这样进行。
主文件
typedef struct Person Person;
struct Person
{
char *names[2];
};
主程序
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
int main()
{
Person john = {{"John","Doe"}};
john.names = {"John","Doe"}; // Expected expression error
printf("%s\n",john.names[0]);
printf("%s\n",john.names[1]);
return 0;
}
“预期的表达”是什么,我可以这样做吗?
解决方案
数组不是 C 中的第一类元素。您可以初始化一个完整的数组,但您只能分配给非数组元素,即标量、指针或结构。
当你写
char *names[2] = {"John","Doe"};
,它是一个初始化,而不是一个赋值。以下分配也会因语法错误而窒息:
char *names[2];
names = {"John","Doe"}; // syntax error here
推荐阅读
- android - Android 8 或更高版本的应用程序在使用 Firebase 性能 SDK 的 Android Oreo 上崩溃
- linux-kernel - 为 ARM64 上的 mali450 GPU 内核驱动程序移植 4.15 之前的计时器代码
- clojure - 为惰性序列调用计数时出现 ArityException
- xcode - Xcode 场景图金字塔大小
- c - 结构指针 - 使用指针访问结构数组
- node.js - 如何在 webpack 编译期间禁止替换 process.env 变量?
- tfs - TFS 到 VSTS 迁移后用户清理
- regex - 正则表达式使用 Notepad++ 查找双括号
- python - 我无法导入 tensorflow-gpu
- oracle - Pl/SQL 拆分表