首页 > 解决方案 > 从结构修改字符串数组

问题描述

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

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

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

标签: carrayspointers

解决方案


数组不是 C 中的第一类元素。您可以初始化一个完整的数组,但您只能分配给非数组元素,即标量、指针或结构。

当你写

char *names[2] = {"John","Doe"};

,它是一个初始化,而不是一个赋值。以下分配也会因语法错误而窒息:

char *names[2];
names = {"John","Doe"};    // syntax error here

推荐阅读