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

Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009
- - Dernière réponse : 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 :)
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
3
Merci
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<!--

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
0
Merci
sprintf pourrait t'aider (ou snprintf )
par exemple quelquechose comme :

char temp[256] = "";
sprintf( temp, "%s%d", RepertoireDefault, NumFichierEnCours );
Commenter la réponse de Hylvenir
Messages postés
150
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
16 février 2009
0
Merci
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.
Commenter la réponse de Oeil_de_taupe
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
0
Merci
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
Commenter la réponse de Hylvenir
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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<!--
Commenter la réponse de SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
sprintf pardon

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

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
0
Merci
id = fopen(strcat(RepertoireDefaut, numfic), "wb");
Commenter la réponse de cs_magma
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
0
Merci
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++
Commenter la réponse de BruNews
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009
0
Merci
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 ;)
Commenter la réponse de cs_Booster
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009
0
Merci
Merci SAKingdom c'est exactement ce que je voulais savoir !
Commenter la réponse de cs_Booster