Je peux y mettre beaucoup plus de caractères sans que le compilateur ne fasse d'erreur...
Votre code n'a enfreint aucune règle syntaxique (sauf dans l'exemple ci-dessous), le compilateur n'a donc aucune raison de se plaindre. Cependant ceci :
char l1[16];
//sprintf(&l1, "%s", "Hello AKIT!!!!!!!!!!!!!!!!"); // & is wrong l1 is already a pointer
// and should have resulted in
// incompatible pointer type warning.
sprintf(l1, "%s", "Hello AKIT!!!!!!!!!!!!!!!!");
...est comportement indéfini . Cela signifie que parfois votre programme semblera fonctionner, mais qu'à tout moment, il peut cesser de fonctionner. Tel qu'il est écrit, vous écrasez le tampon. Mais un programme C ne se plaindra qu'au moment de l'exécution, et seulement si la mémoire dans laquelle vous écrivez (et qui ne vous appartient pas) appartient à un autre processus. Dans ce cas, une erreur d'exécution se produira.
Les méthodes de prévention du problème de dépassement de tampon (autres qu'une programmation minutieuse) comprennent l'apprentissage et l'utilisation des éléments suivants snsprintf() . Il existe également un spécification du format de limitation de la longueur qui peut être utilisé avec sprintf()
.