Question sur le fonctionnement de la fonction strcat [Résolu]

Signaler
Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006
-
Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006
-
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

Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Pas de boucle infinie dans ce cas. Un simple buffer overflow.

@+
Arnotic,
Admin CS,
http://dev.winsysdev.com
MVP Visual C++
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

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...
Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006

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 ?
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

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)
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

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 ^^
Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006

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 !