Cualquier programador C que ha estado trabajando durante más de una semana se ha encontrado con los accidentes que resultan de llamar printf
con más especificadores de formato que argumentos reales, por ejemplo:pasar demasiados argumentos de printf
printf("Gonna %s and %s, %s!", "crash", "burn");
Sin embargo, ¿hay alguna cosas malas similares que pueden suceder cuando pasa demasiados argumentos para printf?
printf("Gonna %s and %s!", "crash", "burn", "dude");
Mi conocimiento de ensamblador x86/x64 me lleva a creer que esto es inofensivo, aunque no estoy convencido de que no hay una condición de borde que me falta, y no tengo ni idea acerca de otras arquitecturas. ¿Se garantiza que esta condición es inofensiva, o hay una trampa potencialmente inductora de colisiones aquí también?
No es una respuesta a su pregunta, apilador de es correcta, pero para los accidentes. 'gcc' debería dar buenas advertencias sobre eso, así que realmente no hay excusa para pasarlo por alto ;-) –
¿Cómo podría GCC dar advertencias al respecto? Tenga en cuenta que la cadena de formato no necesariamente tiene que ser una cadena constante. Puede ser cualquier 'char *' –
GCC puede dar buenas advertencias cuando puede conocer la cadena de formato en tiempo de compilación. Como eso representa una gran franja de casos de uso racional para 'printf' y amigos, esas advertencias son valiosas y deben tenerse en cuenta. – RBerteig