结构变量不能访问结构成员
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);
}
我正在研究 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);
}