union test { int x; char arr[4]; int y; }; int main() { union test t; t.x = 0; t.arr[1] = 'G'; printf("%s", t.arr); return 0; }
Prediga la salida del programa anterior. Suponga que el tamaño de un entero es de 4 bytes y el tamaño de un carácter es de 1 byte. Suponga también que no se necesita alineación.
(A) No se imprime nada
(B) G
(C) Carácter basura seguido de ‘G’
(D) Carácter basura seguido de ‘G’, seguido de más caracteres basura
(E)
Respuesta de error del compilador : (A)
Explicación:Dado que x y arr[4] comparten la misma memoria, cuando establecemos x = 0, todos los caracteres de arr se establecen como 0. O es el valor ASCII de ‘\0’. Cuando hacemos “t.arr[1] = ‘G’”, arr[] se convierte en “\0G\0\0”. Cuando imprimimos una string usando «%s», la función printf comienza desde el primer carácter y continúa imprimiendo hasta que encuentra un \0. Dado que el primer carácter en sí mismo es \0, no se imprime nada.
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA