2011-03-08 1 views
0
#include "stdio.h" 

int main (void) { 
    char xx[1000] = "hello"; 
    sprintf (xx, "xyzzy plugh %s", xx); 
    printf ("%s\n", xx); 
    return 0; 
} 

:::(Erreur) Comportement non défini: xx est utilisé incorrect dans l'appel à sprintf ou snprintf. Quote: Si la copie a lieu entre des objets qui se chevauchent à la suite d'un appel à sprintf() ou snprintf(), les résultats ne sont pas définis.pourquoi le programme suivant donne-t-il une erreur lorsqu'il est vérifié avec l'analyseur cppcheck

Répondre

1

Exactement ce qu'il dit. Vous passez le même tableau en entrée et en sortie à sprintf(), ce qui n'est pas une utilisation supportée car il n'y a aucune garantie que sprintf écrira la chaîne de sortie dans l'ordre croissant.

+0

Il fait aussi très peu de sens de le faire de cette façon. Normalement, vous avez un tableau char pour recevoir les chaînes formatées et les paramètres de votre chaîne de format en tant que paramètres provenant de quelque chose. Peut-être mettre à jour votre fonction pour prendre des arguments de la console et mettre ceux-ci pour faire la mise en forme de la chaîne et utiliser snprintf pour le rendre sûr pour les situations de débordement. –

Questions connexes