【发布时间】:2021-02-25 12:25:53
【问题描述】:
我正在研究 C 中结构的一些基本实现。我的程序的目标是使用变量而不是指针来访问 struct 的成员。 这是我的程序:
#include<stdio.h>
#include<string.h>
struct oldvar{
char name[100];
int age;
float height;
};
void main()
{
struct oldvar DAD;
printf("\nThe old values are %s\n%d\n\f",DAD.name,DAD.age,DAD.height);
strcpy("Will Smith",DAD.name);
DAD.age = 50;
DAD.height = 170;
printf("The updated values are %s\n%d\n\f",DAD.name,DAD.age,DAD.height);
}
在实现这一点时,我只得到了垃圾值,没有更新:
The old values are ⌡o!uC&uⁿ■a
3985408
如何使用变量更新结构成员?
【问题讨论】:
-
哇,GCC 或 Clang 似乎都没有对此发出警告!
-
@ilkkachu 他们不发出警告是正常的,因为在 C 中,字符串文字的类型是
char[]而不是const char[]。这很愚蠢,但我认为他们需要将其保留为非 const 以解决兼容性/可移植性问题。 -
@Jabberwocky,是的,我想可能是这样。但考虑到他们如何警告其他有效但可能是错误的东西(如
if (x = y)),我不知何故希望他们也能抓住这一点——无论如何,它很可能会导致立即崩溃。也许只是这不是一个很常见的错误。 -
啊,但是there is
-Wwrite-strings! (现在我今晚可以安息了。) -
打印旧值而不初始化它们是未定义的行为。如果偶然没有可用的 0 字节,打印非终止字符串可能会使
printf爬过整个内存。