Dommage qu'il soit obligé d'utiliser gets, cette fonction ne devrait plus être utilisée.
http://pwet.fr/man/linux/fonctions_bibliotheques/gets/
Citation :
BOGUES
N'utilisez jamais gets(). Comme il est impossible de savoir à l'avance combien de caractères seront lus par gets(), et comme celui-ci écrira tous les caractères lus, même s'ils débordent du tampon, cette fonction est extrèmement dangereuse à utiliser. On a déjà utilisé ce dysfonctionnement pour créer des trous de sécurité. UTILISEZ TOUJOURS fgets() À LA PLACE DE gets().
|
Par ailleurs, le début de ton programme comporte des erreurs :
- ligne 12 : ton printf est faux. Le N-1 doit être à l'extérieur des guillemets.
- ligne 15 : ton test va forcément échouter car nbremove est initialisée à 0 en ligne 11 et n'est pas modifiée ensuite.
Pour tes 2 fonctions remove et remplace :
- elles ne sont pas appelées pour le moment, elles ne vont donc rien faire.
- pour la fonction remove :
* ligne 32 à 34, tu demandes de saisir 3 caractères, mais ton tableau fait une taille 4. Attention au débordement de tableau comme expliqué précédemment, et cela suppose donc qu'on saisit 3 caractères sans espace, et seulement 3. Le premier est donc l'élément 0, le second 1, et le 3eme 2, tandisque que le dernier ( 4eme) est le caractère fin de ligne du tableau.
* ensuite dans ta boucle, tu compares avec xrecherchee[1] qui est le second caractère, or, c'est le premier qu'il te faut. ( ligne 39 )
* ton test ligne 36 va aller trop loin. En effet, lg contient la longeur de ta chaine. Par exemple "abcdef" , lg vaut 6. Par contre, les index de ton tableau vont de 0 à 5.
* ligne 47 , tu peux écrire x[indecrit++] = x[indlect++]; le ++ sera fait après chaque instruction.
* enfin, en faisant comme ça, tu ne vas pas décaler le caractère fin de ligne ( '\0' ). Il te manque quelque chose du genre x[indecrit] = '\0' à la fin de la boucle.
* la boucle entre 59 et 62 me fait dire que tu n'as peut être pas tout compris. Tu répètes des choses que tu as déjà faites auparavant. De plus indlect n'étant pas réinitialisé à 0, il commence à la fin de lg, donc il ne se passera rien ici en fait.
- pour la fonction remplace,
* idem remove, c'est xrecherchee[1]et xrecherchee[2] et non 2 et 3.
* tu ne lis pas sur l'entrée standard tes caractères, donc les tests suivants ne fonctionneront pas. Alors que tu as lu les 3 caractères avec ta fonction précédente, mais tu ne te sers que tu premier. Je pense que tu devrais lire les 3 caractères en dehors des fonctions, et ensuite tu passes en paramètres des 2 fonctions les caractères voulus. Par exemple :
-> int recherche( char*x , char remove ) { ... }
-> int remplace ( char*x , char from, char to ) { ... }
* ligne 78 , comme expliqué précédemment tu declares xrecherchee mais c'est un tableau non initialisé. Je suppose que tu penses que vu que ca a le même nom, ca a été modifié dans la fonction précédente ( xrecherchee[4] ) mais pas du tout, ce sont 2 variables différentes , quand bien même elles sont le même nom, elles sont déclarées localement à chaque fonction, leur scope (portée , existence ) se limite à la fonction.
* la suite est forcément fausse, même si la logique ne l'est pas complètement ( lg n'est pas non plus initialisée, c'est aussi une autre variable que celle dans "remove" )
* ligne 79, tu mets dans x3 quelque chose qui n'existe pas ( xremplacement n existe pas ) et tu ne te sers pas de x3. Ligne fausse et inutile
Bon courage