Question sur le fonctionnement de la fonction strcat

Résolu
n_o_u_n_o_u Messages postés 14 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 14 février 2006 - 19 janv. 2006 à 21:21
n_o_u_n_o_u Messages postés 14 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 14 février 2006 - 20 janv. 2006 à 19:50
Bonjour,

je ne comprends pas bien le fonctionnement de la fonction strcat.
Dans l'exemple ci-dessous, je n'obtiens qu'une seule sortie (le premier cout).
Si la ligne qui contient strcat est mise en commentaire, j'obtiens bien deux sorties.

Pourquoi ne peut-on pas réaliser ce genre de manipulation : est ce que la fonction strcat
aurait planté ?

Merci d'avance pour votre aide.

--------------------
#include
#include <string.h>


using namespace std;


void main()
{
char tableau[40+1];
strcpy(tableau,"pour essai");
cout << tableau << endl;
strcat (tableau, tableau); // <=
cout << tableau << endl;
}
--------------------

6 réponses

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
20 janv. 2006 à 11:50
Pas de boucle infinie dans ce cas. Un simple buffer overflow.

@+
Arnotic,
Admin CS,
http://dev.winsysdev.com
MVP Visual C++
3
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
19 janv. 2006 à 22:16
lol c'est tout à fait normal. Regarde, quand tu copies de 'tableau' à 'tableau', tu commences par lire le premier caractère, puis tu le rajoute à la fin de 'tableau'...sauf que cela fera que le 'tableau' que tu ajoute sera lui même +grand (c'est la même variable)....il se produit une boucle infinie normalement...ou un truc analogue...
0
n_o_u_n_o_u Messages postés 14 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 14 février 2006
19 janv. 2006 à 22:37
C'est un peu ce que je pensais...
Cependant si effectivement cela a planté, pourquoi est-ce que cela n'est pas sanctionné par un message d'erreur au moment de l'exécution du programme ?
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
19 janv. 2006 à 22:42
Parce qu'une boucle infinie n'est pas détectable....tu peux t'en rendre compte si ton programme utilise presque les 100% de ton unité centrale ! (ou 50% si tu as l'hyperthreading)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
20 janv. 2006 à 12:49
Oui Arnotic, justement...j'y ai pensé...sauf que n_o_u_n_o_u n'a pas reporté un crash du processus...donc jme suis dit qu'il y a vait peut-etre plutôt une boucle ^^
0
n_o_u_n_o_u Messages postés 14 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 14 février 2006
20 janv. 2006 à 19:50
Je ne pense pas à une boucle infinie car la charge du processeur n'a pratiquement pas variée.
Merci beaucoup pour votre aide à tous les deux.

A bientôt et bonne continuation !
0
Rejoignez-nous