У меня есть объединение с двумя структурными переменными. структура содержит строку (массив символов).
Вот мой код:
#include <stdio.h>
#include <string.h>
int main(void) {
struct name{
char name_v[50];
};
union myunion{
struct name a;
struct name b;
}x;
strcpy(x.a.name_v, "HELLO PEEPS");
printf("%s\t%s", x.a.name_v, x.b.name_v);
return 0;
}
Поскольку объединение выделяет достаточно памяти для хранения наивысшего значения в данный момент времени, я думал, что name_v
только для struct name a
будет содержать значение "HELLO PEEPS"
, а значение struct name b
будет содержать '\0'
.
Однако вывод приведенного выше кода
HELLO PEEPS HELLO PEEPS
Но я ожидал, что вместо второго HELLO PEEPS
будет отображаться что-то еще (null?).
Получается, что обоим членам союза одновременно назначается одно и то же значение. (???)
Почему это происходит?
Почему я не получаю ожидаемых результатов?
Что я делаю не так, что не приводит меня к этому?
Я ожидаю, что один из членов союза будет иметь нулевое значение, когда другой имеет какое-то допустимое значение и хочет иметь возможность это проверить. Пожалуйста, помогите мне добиться этого.
name_v[50]
, а другой член будет int, вы получите внутри этого целого числа первую или две буквы (в зависимости от размера int, который зависит от платформы) строки. 17.10.2017