Des variables repoussées produisent-elles des failles ?
tatsuyad
Messages postés
75
Date d'inscription
Statut
Membre
Dernière intervention
-
lefilsdelaterre Messages postés 11 Statut Membre -
lefilsdelaterre Messages postés 11 Statut Membre -
Bonjour.
Novice en Perl,j'ai écrit un code comme tel:
Comme vous le voyez,le nombre des paramètres passés ne correspond pas à la fonction "Salut" de l'appel. En C,si on ne fait pas recours à "Valt" (Le nom,je ne m'en souvients plus,c'est une variable prédéfinie par le systéme qui permet d'avoir beaucoup de variables à passer à printf() ).
Perl ne grogne sur rien,même si j'inclus deux modules au top..
Pensez-vous que mon code est sain ?
Novice en Perl,j'ai écrit un code comme tel:
use strict;
use warnings;
sub Salut{
my ($x,$y) = @_;
print "Salut".$x.$y;
}
Salut("jiji","jaja","juju");
Comme vous le voyez,le nombre des paramètres passés ne correspond pas à la fonction "Salut" de l'appel. En C,si on ne fait pas recours à "Valt" (Le nom,je ne m'en souvients plus,c'est une variable prédéfinie par le systéme qui permet d'avoir beaucoup de variables à passer à printf() ).
Perl ne grogne sur rien,même si j'inclus deux modules au top..
Pensez-vous que mon code est sain ?
| EDIT : Ajout du LANGAGE dans les balises de code.
Explications disponibles ICI Merci d'y penser dans tes prochains messages. |
1 réponse
-
Bonjour,
Perl n'a aucune raison de grogner. Les arguments envoyés à la fonction sont tous les trois stockés automatiquement dans le tableau @_, et rien n'oblige à tous les utiliser par la suite.
Dans ton code, tu choisis simplement de recopier les deux premiers arguments et de ne pas utiliser le troisième.-
-
C'est clair que pour de petits scripts, le perl permet de ne pas trop s'embêter... mais dans l'absolu il y a bien un problème quand même.
On peut très bien se mettre à la place d'un utilisateur qui envoie trois arguments en espérant qu'ils soient tous les trois traités, or la fonction n'en utilise que 2. Le programme ne montre aucun signe de cette lacune, et à débugger ça peut vite devenir un calvaire.
En C on devrait par exemple envoyer deux arguments : l'un pour le nombre de chaînes à traiter, et le deuxième un tableau de pointeurs, chacun correspondant à l'adresse d'une chaîne. L'affichage se ferait alors dans une boucle.
Cela donnerait quelque chose comme ça :
#include <stdio.h>
#include <stdlib.h>
void aff(int n , char **c) {
int i ;
for (i = 0 ; i <= n-1 ; i++) {
printf("%s ; " , c[i]) ;
}
}
int main() {
char **c ;
c = (char**)calloc(3 , sizeof(char[10])) ;
c[0] = "pouet" ;
c[1] = "pouic" ;
c[2] = "plouf" ;
aff(3 , c) ;
return 0 ;
}
-