Assosier 2 chaine de caractere PB :s [Résolu]

Signaler
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009
-
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009
-
Bonjour,
Alors voila je veux tout simplement assosier 2 chaines de caractere mais jaimerais le faire sans passer par une variables intermediaire je m'explique, je voudrais que la 2eme chaine soit à la suite de la premiere mais sans toucher à la premiere et sans passer par du temporaire.
Voici mon code (vous comprendrer mieu)

//ça c'est ce que j'AI (et qui marche : en passant par une variable temporaire)
        char temp[2000];
        strcpy(temp,RepertoireDefaut); //RepertoireDefaut est un char*

        char numfic[10];
        itoa(NumFichierEnCours,numfic,10);
        strcat(temp,numfic);

        //Ouverture du fichier
        idfichier=fopen(temp,"wb");

//ça c'est ce que j'AIMERAIS avoir

        char numfic[10];

        itoa(NumFichierEnCours,numfic,10);


        //Ouverture du fichier

        idfichier=fopen(RepertoireDefaut+numfic,"wb");

Voila enfet jaimerais faire le truc que jai mi en rouge est qui est ABSOLUMENT FAUX je m'en rend bien compte mais je ne voi pas le moyen de faire ça. Quelqu'un pourait me mettre sur la voi ?

Merci d'avance :)

11 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Non ça n'existe pas. Une fonction qui retourne un char * retourne enfait une adresse vers une chaine de caractère en mémoire. Ceci signifie que ta chaine concaténée se retrouvera en mémoire peut-importe la façon de procéder. Tu n'aura donc pas le choix que de passer par une troisième chaine pour concaténer 2 chaines tout en voulant les garder inchangée.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
sprintf pourrait t'aider (ou snprintf )
par exemple quelquechose comme :

char temp[256] = "";
sprintf( temp, "%s%d", RepertoireDefault, NumFichierEnCours );
Messages postés
150
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
16 février 2009

En effet sprintf est une solution intéressant (fais attention, ça peut créer des failles de sécurité cette fonction!).

Sinon tu as toujours la classe string qui te permet de faire ce que t'as fais assez rapidement.
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
un std::ostringstream serait plus facile à utiliser qu'une std::string pour la conversion entier > chaine aussi.

snprintf n'a pas l'inconvénient du sprintf
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
sprint, oui mais ça dépend. Si il n'a que deux chaines à concatener, mieu vaut utiliser strcat. Essaye d'éviter sprintf le plus souvent.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
sprintf pardon

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
char temp[256], *c, *d;
c = RepertoireDefaut;
d = temp;
while(*d = *c) {c++; d++;}
itoa(NumFichierEnCours, d, 10);

ciao...
BruNews, MVP VC++
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
id = fopen(strcat(RepertoireDefaut, numfic), "wb");
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Mettre la ligne strcat sur la ligne fopen ne changera pas le code du compilo d'un iota.
strcat provoque 2 parcours de la 1ere chaine insérée dans temp[], reste acceptable si on ne cherche pas les perfs optimales.
sprintf, evacuons le sujet sinon je deviendrais grossier.

ciao...
BruNews, MVP VC++
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009

Bonjour,

Merci pour toute cette activiter autour de mon probleme, enfet je veu simplement eviter de passer par un fichier temp

strcat(RepertoireDefaut, numfic) << ceci ne me convient pas car je ne veu pas toucher à mon RepertoireDefaut

char temp[256] = "";
sprintf( temp, "%s%d", RepertoireDefault, NumFichierEnCours );<< la aussi tu passe par une variable temporaire et jaimerais evité cela

En realiter je cherche une fonction qui me retourne un char * lorsque je lui donne 2 char * à concaténé.

Mais enfet je pense que cette fonction n'existe pas. (Si quelqu'un pouvais me le confirmer)(De toute manière au pire je la code)

Merci à tous ;)
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009

Merci SAKingdom c'est exactement ce que je voulais savoir !