Prediga la salida de los siguientes programas en C.
Pregunta 1
#include <stdio.h> char* fun() { return "awake"; } int main() { printf("%s",fun()+ printf("I see you")); getchar(); return 0; }
Salida: Una string que comienza con «Te veo»
Explicación: (Gracias a Venki por sugerir esta solución)
La función fun() devuelve el puntero a char. Además de imprimir la string «Te veo», la función printf() devuelve el número de caracteres que imprimió (es decir, 9). La expresión [diversión()+ printf(“Te veo”)] puede reducirse a [“despierto” + 9] que no es más que la dirección base del literal de string “despierto” desplazada por 9 caracteres. Por lo tanto, la expresión [“despierto” + 9] devuelve datos no deseados cuando se imprime a través del especificador %s hasta que encuentra ‘\0’.
Pregunta 2
#include <stdio.h> int main() { unsigned i ; for( i = 0 ; i < 4 ; ++i ) { fprintf( stdout , "i = %d\n" , ("11213141") ) ; } getchar(); return 0 ; }
Salida: Imprime diferentes salidas en diferentes máquinas.
Explicación: (Gracias a Venki por sugerir esta solución)
El especificador de formato es %d, convierte la dirección base de la string «11213141» en un número entero. La dirección base de la string depende de la asignación de memoria por parte del compilador. El ciclo for imprime la misma dirección cuatro veces. Intente usar flujos de C++, verá el poder del sistema de tipos.
Escriba comentarios si encuentra que alguna de las respuestas/explicaciones es incorrecta, o si desea compartir más información sobre los temas discutidos anteriormente.
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