【发布时间】: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