Bonsoir à tous,
Lorsque je copie une chaine1 de caractère dans une chaine2 avec une taille par exemple de 5, la chaine2 que je vais trouvé contiendra bien les 5 caractères copié mais aussi des caractères spéciaux. Donc cette chaine que j'ai initialisé à une taille 5 change de taille.
J'ai pensé crée un tableau temporaire à la bonne taille pour recopier uniquement les 5 premiers caractères de chaine2 afin de ne plus avoir ces caractères spéciaux inconnus à la fin. Mais le résultat est le même.
Est ce un défaut du compilateur(mingw)? Ou est ce que y a quelque chose qui m'a échappée?
Je vous laisse une partie du code compilable et qui vous montre le problème.
P.S. Je pose pas mal de question en ce moment, mais j'ai beaucoup (mal?) cherché sur le net, fais (je crois) tous les tests possibles mais c'est surtout que le forum est actif et regorge de gens compétents et sympas.
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char w[] = "test retest test"; char tmp[finMot(1, w)]; mot(1,w,tmp); printf("Le 1er mot est %s/", tmp); return 0; } void mot(int n, char c[], char mot[]){//renvoie le niéme mot de la chaine c dans la chaine mot int numMot = 0; int debutMot = 0; int i=0; int finMot=0; for(i =0; i<taille(c)-1; i++){ if(c[i] != 32 && c[i+1] == 32){ finMot = i+1; numMot++; if(numMot == n){ break; }else{ debutMot =i+2;//si entre chaque mot y a qu'un seul espace } } } for(i =debutMot; i<finMot; i++){ mot[i-debutMot] = c[i]; } } int finMot(int n,char c[]){// renvoie l'index de la fin du nieme mot dans la chaine c int finMot = 0; int numMot = 0; int debutMot = 0; int i=0; int p=0; for(i =0; i<taille(c); i++){ if(c[i] != 32 && c[i+1] == 32){ p = i+1; numMot++; if(numMot == n){ break; }else{ debutMot =i+2;//si entre chaque mot y a qu'un seul espace } } } return finMot; } int taille(char c[]){ int i = 0; while(c[i] != '\0'){ i++; } return i; }
Partager