c - 在结构中初始化 main vs 中的 char 数组

标签 c arrays string struct char

我正在尝试初始化一个字符数组

如果我在 main 中这样做,它工作正常

char arr1[20] = "initial";
printf("%s", arr1);

但是如果我尝试在其他任何地方(例如在结构中)执行此操作,那么请尝试在我的主函数中使用它,例如

struct foo 
{
    char arr1[20] = "initial";
}

int main(void)
{
     struct foo foobar;
     printf("%s", foobar.arr1);
}

struct foo 
{
    char arr1[20];
}

int main(void)
{
     struct foo foobar;
     foobar.arr1 = "initial";
     printf("%s", foobar.arr1);
}

我开始出现错误。为什么一个有效而另一个无效?

最佳答案

您将结构定义变量初始化混淆了。

struct 定义说明哪些类型构成一个 struct 以及它们的名称是什么,例如:

struct foo 
{
    char arr1[20];
};

说“struct foo 是我们刚刚定义的一种类型,它由 char 数组 [20] 组成”。目前还没有这种类型的实际变量。

然后您可以声明和初始化此类型的实例,其方式与您在第一个示例中声明和初始化 arr1 的方式类似:

struct foo foobar = { "initial" };

关于c - 在结构中初始化 main vs 中的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26622592/

相关文章:

c - 一个文件中注释的字符数(C编程)

c - 快速排序跳过一个元素

C++ 风格的 vector - 指针数组还是数组?

c++ - 将任何字符串转换为固定大小的字符串

python - 将包含整数的列表转换为字符串

c - 从 C 中的字符串中提取负分数和正分数

c - 我的 malloc 数组是否更改了意外的值?

php - array_push 创建新数组而不是添加

javascript - 按 id 从对象数组中获取属性的最大值

将特定数量的字符从一个字符串复制到另一个字符串