Assosier 2 chaine de caractere PB :s

Résolu
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009 - 5 oct. 2006 à 22:30
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009 - 7 oct. 2006 à 10:00
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
6 oct. 2006 à 22:41
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<!--
3
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
5 oct. 2006 à 23:02
sprintf pourrait t'aider (ou snprintf )
par exemple quelquechose comme :

char temp[256] = "";
sprintf( temp, "%s%d", RepertoireDefault, NumFichierEnCours );
0
Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
5 oct. 2006 à 23:19
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.
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
5 oct. 2006 à 23:22
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
0

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

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
6 oct. 2006 à 00:00
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<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
6 oct. 2006 à 00:01
sprintf pardon

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

ciao...
BruNews, MVP VC++
0
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011
6 oct. 2006 à 11:56
id = fopen(strcat(RepertoireDefaut, numfic), "wb");
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 oct. 2006 à 12:28
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++
0
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009
6 oct. 2006 à 18:41
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 ;)
0
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009
7 oct. 2006 à 10:00
Merci SAKingdom c'est exactement ce que je voulais savoir !
0
Rejoignez-nous