我通常以这种方式处理字符串数组,因为它允许我不指定字符限制:
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;
}
什么是“期望的表达式”,我可以这样做吗?
答案 0 :(得分:3)
对于特定字段/属性的初始化,可以在声明过程中执行以下操作:
Person john = {.names = {"John","Doe"}};
要初始化其他字段,例如address
和names
,可以按照以下步骤进行操作:
Person john = {.names = {"John","Doe"}, .address="foo"};
声明后,您将必须指定数组索引。
john.names[0] = "John"
答案 1 :(得分:3)
数组不是C语言中的头等元素。您可以初始化一个完整的数组,但是您只能分配给非数组元素,即标量,指针或结构。
写作时
char *names[2] = {"John","Doe"};
,它是一个初始化,而不是赋值。并且以下分配也会因语法错误而阻塞:
char *names[2];
names = {"John","Doe"}; // syntax error here
答案 2 :(得分:1)
好吧,我想可能有几种方法可以访问结构的内容, 我这边学到的方式是这样的结构 //
typedef struct struc_person
{
char *name[2];
} type_person;
type_person->name[0] = value_of_the_first_name;
type_person->name[1] = value_of_the_surname;