我有结构和我有这样的结构化类型的阵列,我试图使用用于初始化数组元素但字符串数组是相同结构类型数组初始化
#include "stdafx.h"
#include "string.h"
#define NUMBER_OF_STARS 200
#define NUMBER_OF_PLANETS 200
//== STAR STRUCTURE ==//
// NAME | DIAMTER | TEMPERATURE | COMPANION PLANET/S //
//== END STRUCTURE ==//
typedef struct _star
{
char *name;
int diameter;
int temperature;
}star;
//== STAR STRUCTURE ==//
// NAME | DISTANCE TO STAR | TWIRLING STAR | SPEED IN SPACE //
//== END STRUCTURE ==//
typedef struct _planet
{
char *name;
int distance_to_star;
char *twirling_star;
int speed_in_space;
}planet;
typedef struct _galaxy
{
star s_star;
planet s_planet;
}galaxy;
int main()
{
star s_star[NUMBER_OF_STARS];
printf("Create your STARS\n");
for (int i = 0; i < 200; ++i)
{
printf("Enter name of STAR\n");
char s_name[20];
scanf_s(" %s", s_name, 20);
printf("Enter diameter of STAR\n");
int s_diameter;
scanf_s(" %i", &s_diameter);
printf("Enter temperature of STAR\n");
int s_temperature;
scanf_s("%i", &s_temperature);
char s_com_planet[20];
printf("\n");
s_star[i] = { s_name,s_diameter,s_temperature };
printf("Would you want to create another one?(YES/NO)\n");
char cmd_answer[5];
scanf_s("%s", cmd_answer, 5);
if (strstr(cmd_answer, "YES")) continue;
else if(strstr(cmd_answer, "NO")) break;
else break;
//printf("Name of STAR:\t\t%s\nDiameter of STAR:\t%i\nTemperature of STAR:\t%i\n\n", s_star->name, s_star->diameter, s_star->temperature);
}
printf("%s", s_star[1].name);
for (;;);
return 0;
}
并且当我进入例如:
name1
1
1
不是再次
name2
2
2
然后再
name3
3
3
Visual Studio中显示,s_star
阵列s_star[0].name
s_star[1].name
s_star[2].name
的是在我的情况下输出同样是name3
谁能弄清楚这一点,并解释我,我在做什么错。
对于每个char * struct成员,您正在读入一个自动(堆栈)数组并将char *成员设置为指向它。您可以通过保存指向malloc'd内存的指针来解决问题。 – PSkocik