我有結構和我有這樣的結構化類型的陣列,我試圖使用用於初始化數組元素但字符串數組是相同結構類型數組初始化
#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