修改结构中的字符串数组

时间:2019-01-14 16:52:56

标签: c arrays pointers

我通常以这种方式处理字符串数组,因为它允许我不指定字符限制:

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"}};进行初始化的过程中这样做。因此,我不确定是否仅在初始化期间才允许这样做。

main.h

typedef struct Person Person;

struct Person
{
    char *names[2];
};

main.c

#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;
}

什么是“期望的表达式”,我可以这样做吗?

3 个答案:

答案 0 :(得分:3)

对于特定字段/属性的初始化,可以在声明过程中执行以下操作:

Person john = {.names = {"John","Doe"}};

要初始化其他字段,例如addressnames,可以按照以下步骤进行操作:

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;