Ben si, tu sors du tampon.
Et bien.
Et si je teste ton code dans le debugger de Visual, j'ai une belle Access Violation.
Version imprimable
Ben si, tu sors du tampon.
Et bien.
Et si je teste ton code dans le debugger de Visual, j'ai une belle Access Violation.
Euh, je sors du tampon ou ?
Ben, ta boucle sort complètement, puisqu'elle ne s'arrête que si elle rencontre un carcatère 15 (un caractère de contrôle non-utilisé).
Et il n'existe aucun caractère 15 dans le tableau explicitement initialisé, donc tu sors forcément...
int main(int argc, char *argv[])
{
char mot[30] = "Salut, \0 Ca va ?";
char Sep = '\0';
int i = 0;
int fin = 15;
for(i = 0 ; mot[i] != mot[fin] ; i++)
{
if(mot[i] == Sep)
{
mot[i] = '.';
}
}
cout << "Phrase : " << mot << endl;
return EXIT_SUCCESS;
}
Bon voilà, je comprends pas trop. Quand la chaine est "Salut, \0 Ca va ?" avec un espace entre le \0, il remplace bien. Quand c'est "Salut,\0 Ca va ?" sans espace, il renvoie que "Salut,".
De plus le "fin" marche pas, :(
La chaîne change de taille si tu retire l'espace, donc mot[fin] est différent...
D'ailleurs, d'où sort ce 15 ?
Ben en fait, vu que c'est un tableau de 2500, je récupère la taille du recv pour faire un genre de Tampon dynamique. Je vais pas afficher les caractères restants. Pareil ici, sur le petit tableau je voulais tester en arrêtant la chaine quelque part. Mais faudrait recopier la chaine dans un autre tableau pour ne pas compter le reste.
Donc voilà, ça change le \0 que si c'est pas près d'un caractère :(
Code:
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 #include <iostream> void DeSepareChaine(char *chn, size_t n) { size_t i; for(i=0 ; i<n ; i++) { if(chn[i] == '\0') chn[i] = '~'; } /* Précaution */ chn[n-1] = '\0'; } int main(void) { /*-- ---[--] - "123456778901234" */ char chn[30] = "Salut,\0Ca va ?"; /* La chaine fait 14 caractères, plus le caractère nul de fin */ std::cout << "Avant de-separation : " << chn << std::endl; DeSepareChaine(chn, 15); std::cout << "Apres de-separation : " << chn << std::endl; return 0; }