结构变量不能访问结构成员

struct variable cannot access struct members

我正在研究 C 中结构的一些基本实现。我的程序的目标是使用变量而不是指针来访问结构的成员。 这是我的程序:

#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
 

如何使用变量更新我的结构成员?

    strcpy("Will Smith",DAD.name);

错了。

根据strcpy(3) - Linux manual page

char *strcpy(char *dest, const char *src);

destination(写入副本的位置)是第一个参数,source(应该复制的内容)是第二个参数参数。

因此,该行应该是

    strcpy(DAD.name,"Will Smith");

还使用未初始化的非静态局部变量的值调用未定义的行为,允许任何事情发生。

为了更安全,您应该在打印前初始化变量DAD。换句话说,行

    struct oldvar DAD;

应该是(例如)

    struct oldvar DAD = {""};

strcpy("Will Smith",DAD.name); --> strcpy(DAD.name, "Will Smith");

strcpy("威尔·史密斯",DAD.name);将 DAD.name 复制到一些包含“Will Smith”(只读内存部分)的常量内存。

因此,您的程序将崩溃,因为试图写入只读内存部分

如其他答案中所述,strcpy() 的第一个参数是 目的地 。另外 printf 中也有错误。应该是%f,不是\f

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h> 
#include<string.h>

struct oldvar {
    char name[100];
    int age;
    float height;
};

int main(void)
{
    struct oldvar DAD={"\n",0,0.0};
    strcpy(DAD.name,"will Smith");
    printf("\nThe old values are %s\n%d\n%f", DAD.name, DAD.age, DAD.height);

    DAD.age = 50;
    DAD.height = 170;

    printf("The updated values are %s\n%d\n%f", DAD.name, DAD.age, DAD.height);
}