si ejecutamos el siguiente código usando la entrada "hi", la salida simplemente será "hi"
main(int argc, char **argv)
{
char *secret = "This is a secret 1\n";
char *secret2 = "This is secret 2\n";
printf(argv[1]);
}
sin embargo, si ejecutamos el programa con la entrada "% s", la salida será "Esto es un secreto 1"
por lo que entiendo, la razón de esto es que cuando printf se alimenta con la cadena de formato% s, no comprueba si se ha insertado un dato de cadena en la pila, por lo tanto, si no se suministra una cadena, buscará los siguientes datos almacenados en la pila, que en este caso es nuestra cadena secreta. Por lo tanto, para cada% s obtendrá los siguientes datos en su marco de pila y los mostrará en formato de cadena.
Mi pregunta es, teniendo en cuenta que (main) y (printf) tienen su propio marco de pila, ¿cómo puede% s hacer que printf muestre datos que no pertenecen a su marco de pila? (ambas cadenas secretas están en principal)