2011-01-12 8 views
5

Probé el código en mi sistema. Esto es lo que tengo ...... 1)Salida de código variable C

#include <stdio.h> 

    int main() 
    { 
     //int a = 10; 
     printf("%s"); 
     return 0; 
    } 

Output: 
1í^áäðPTRhh 

2)

#include <stdio.h> 

    int main() 
    { 
     int a = 10; 
     printf("%s\n"); 
     return 0; 
    } 

Output: 
__libc_start_main 

he intentado en otro sistema (esta compilador). Y la salida fue diferente. En realidad, debe estar imprimiendo el valor más alto en la pila. Entonces y no es único en todas partes?

+0

es el sistema operativo de 32 bits y 64 bits? puede ser el problema de gestión de memoria – Sudantha

+1

@Sudantha: ¿Qué tiene esto que ver con la gestión de memoria? –

+2

@Sudantha: OS es de 32 bits Pero, no estoy seguro de si tiene algún impacto ??? .. – aTJ

Respuesta

7

En su instrucción printf, especificó un especificador de formato% s, que significa imprimir una cadena. Se comprobará la parte superior de la pila e imprimir la cadena presente en la parte superior de la pila

disposición de pila es completamente compilador depende la función

El __libc_start_main() deberá realizar cualquier inicialización necesaria del entorno de ejecución, llamar a la función principal con argumentos apropiados, y manejar el retorno desde main() y que estaba en la parte superior de la pila. Y eso es lo que obtienes como salida

+1

-1: No responde la pregunta. ¿Y por qué esperarías ver 10? –

+0

@ Oli: la respuesta fue modificada ... por favor revise – Abi

7

Porque los compiladores son libres de organizar el contenido de la pila como deseen. Además, lo que sea que esté "en la parte superior de la pila" será interpretado por printf() como un puntero; podría haber cualquier basura al azar en la ubicación de almacenamiento correspondiente.

9

Estás tratando con undefined behavior, por lo que no puedes esperar que sea consistente, ni seguir ningún tipo de patrón entre compiladores, arquitecturas o incluso ejecuciones del mismo programa.

Cuestiones relacionadas