【问题标题】:How to initialize character arrays after declaration [duplicate]声明后如何初始化字符数组[重复]
【发布时间】:2018-11-30 23:50:25
【问题描述】:

当您在初始化后尝试分配字符数组时,您必须使用 strcpy 之类的函数。

#include<stdio.h>

void main()
{
    struct emp
    {
        char name[25];
        int age;
        float bs;
    };
    struct emp e;
    e.name = "Steven";
    e.age = 25;
    printf("%s %d\n", e.name, e.age);
}

此代码仅在我进行以下更改时才有效

#include<stdio.h>

void main()
{
    struct emp
    {
        char name[25];
        int age;
        float bs;
    };
    struct emp e;
    strcpy(e.name,  "Steven");
    e.age = 25;
    printf("%s %d\n", e.name, e.age);
}

但是,如果我们使用指针而不是数组,我们可以在初始化后分配字符串。

#include<stdio.h>

void main()
{
    struct emp
    {
        char *name;
        int age;
        float bs;
    };
    struct emp e;
    e.name = "Steven";
    e.age = 25;
    printf("%s %d\n", e.name, e.age);
}

如果一个指针和一个数组都指向一个内存位置,为什么这个工作而不是第一个代码?

【问题讨论】:

  • 因为 - 与不懂 c 的人会告诉你的相反 - 数组不是指针,指针数组也不是。
  • @EOF 指针数组是指针数组。 *scnr*
  • 感觉用词不对。变量(数组或其他)的初始化发生在声明时。在我们称之为初始化的其他任何时候,它只是简单地操作变量。
  • C 没有字符串类型;您必须使用 strcpy() 和 strcmp() 之类的函数来执行类似字符串的操作。所以e.age = 25 很好;但你需要strcpy(e.name, "Steven") 来完成这项任务。如果可以的话,编译时初始化会容易一些。

标签: c struct initialization


【解决方案1】:

第一个不起作用,因为将指针分配给数组是没有意义的。但是,第二个有效,因为它将指针分配给指针

【讨论】:

  • 将指针赋值给数组确实有意义(如赋值左侧的指针,右侧的数组名称),但它不会复制数组的内容。反过来是不可能的。
  • @Peter 也许你想再想想那句话。
猜你喜欢
  • 2013-12-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
相关资源
最近更新 更多