Concaténer un caractère a une chaine de caractères [Résolu]

Signaler
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
-
Bonjour, voila g un petit problem,

ds mon programe je converti un int en char, mais apres je veu le concaténer en faisant strcat(chaine_de_caract,caract);

Mais biensur cela ne vas pas, kelkun a til un idée?

Merci d'avance.

22 réponses

Messages postés
28
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
31 janvier 2009

Salut,



C'est normal car ta variable "char D_chinter" est un seul caractère, il
faut en faire une chaine de caractère ex : char D_chinter[5].



Et ne pas oublier de modifier :

itoa(D_tmt->tm_mon,&D_chinter,10);



Par :

itoa(D_tmt->tm_mon,D_chinter,10); // J'ai enlevé le symbole & de D_chinter



voilà bonne chance et a +.
Messages postés
19
Date d'inscription
lundi 28 juin 2004
Statut
Membre
Dernière intervention
29 novembre 2005

Tu peut tout mettre dans un sprintf sans te casser la tête avec mille instructions.

sprintf (D_timedecomposee, "%s/%d\n",
D_ptdayweek[D_tmt->tm_wday],
D_tmt->tm_mon);
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
itoa(monNombre, MaChaine + strlen(MaChaine), 10);

ciao...
BruNews, MVP VC++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
et si ça ne va pas, c'est qu'il y a un problème dans le code voyons, et
là évidemment on peut pas dire, puisque tu ne postes pas de code...

Met le code en question, avec les déclarations de variables, et aussi les erreurs



Tu peux utiliser ossi wsprintf( Chaine_de_caract, "%s %i", Chaine_de_caract, Entier_a_concat);

lol, je sais pas si c'est la bonne syntaxe, mais c'est dans ce style ;)

void Aurevoir( void ); //Bonne journée
Messages postés
48
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
26 juillet 2005
2
Salut,



un sprintf(chaine_de_caract, "%d", monInt); ferait il l'affaire ?



P.S : sinon détail un peu plus ce qui ne va pas avec strcat().
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Laisser les vieilles casseroles au grenier, wsprintf(...) et sprintf(...) sont des moulins a vent!
Preferez itoa(...) et toute sa famille!

Shell
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
oki je met le code de cette fonction (elle est pas finie vu ke j'arrive pas a résoudre ce prob lol):

// procédure de l'historique des messages envoyer, ceux-ci sont sauver dans un fichier séquentiel.
void historique_mess()
{
time_t D_time;
char D_timedecomposee[6],D_chinter;
struct tm*D_tmt;
const char *D_ptdayweek[]={"Dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"};
FILE *fichier_hist;

D_time = time(NULL);
D_tmt = localtime(&D_time);
strcpy(D_timedecomposee,""); //initialise la variable char (efface les crasses qu'il y avait dedans).
strcat(D_timedecomposee,D_ptdayweek[D_tmt->tm_wday]);
strcat(D_timedecomposee,"/");
itoa(D_tmt->tm_mon,&D_chinter,10);
strcat(D_timedecomposee,D_chinter); /ERREUR ICI
strcat(D_timedecomposee,"\n");
fichier_hist = fopen("histomsg.txt", "a+");
fputs(D_timedecomposee,fichier_hist);
fclose(fichier_hist);
//en cours
}

je programme sous borland C++
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
Merci bcp
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Le seul problème avec itoa(), c'est que cette fonction ne fait pas partie du standard ANSI-C.

http://www.cplusplus.com/ref/cstdlib/index.html

Kaid - kaid.fr.st
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Salut Kaid,

tu as un exemple de compilo qui ne connait pas itoa() ?

ciao...
BruNews, MVP VC++
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Ca ne dépend pas que du compilo mais aussi du système. itoa() n'est pas implémenté sous Solaris, *BSD, HP/UX et certainement sur tous les autres Unix autre que Linux.

Mais c'est sûr que cet argument n'est valable que dans un soucis de portabilité du code.

Kaid - kaid.fr.st
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
je ne comprends pas cela: "non implémenté sous tel systéme".
Un compilo correct place le code de itoa() dans l'exécutable, non ?

ciao...
BruNews, MVP VC++
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Sous Unix, il se contente d'appeller la fonction implémentée dans la
libc du système et si elle n'est pas implémentée, il ne va pas
l'inventer.


Kaid - kaid.fr.st
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
c'est la libc du pauvre alors...

ciao...
BruNews, MVP VC++
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

C'est pas la libc du pauvre, c'est la libc standard.

Kaid - kaid.fr.st
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
enfin je ne saisis pas bien ces modes de compilation:
si je mets un itoa dans mon code (Win), j'ai beau regarder les dépendances de l'exe, y a aucun appel externe, le code de itoa est dans l'exe.
Pas moyen de faire cela sur Unix ??? en ce sens que je dis que c'est 'du pauvre'.

ciao...
BruNews, MVP VC++
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Aucun appel externe à itoa() dans l'EXE c'est normal, la libc est liée statiquement à ton exécutable en mode Release avec VC++. Sous
Windows il s'agit d'une fonction présente dans le runtime C de VC++ et
qui ne fait pas partie du système. Sous UNIX, une telle fonction est
présente dans la libc installée de base avec le système.

Kaid - kaid.fr.st
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
bien là que je voulais arriver, ils pourraient le mettre dans le runtime C des compilos qui ciblent les Unix n'ayant pas itoa, et cela pour toutes les fonctions habituelles qui n'y sont pas.

PS: Ah que j'aime mon Windows et VS.

ciao...
BruNews, MVP VC++
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Oui mais comment tu détermines la liste des fonctions "habituelles" ?
Est-ce que la fonction implémentée par le compilateur A aura le même
comportement que celle implémentée par le compilateur B dans tous les
cas d'utilisation ? Les standards sont là pour éviter ce genre de
problème.



En suivant ton raisonnement: MS ajoute une fonction à Windows à partir
de la version 2K, je l'utilise dans mon programme. Quand je veux
compiler mon programme sous NT ou 9X, VC++ devrait remarquer que la
fonction n'existe et que c'est à lui d'ajouter le code pour que ca
compile ???



Kaid - kaid.fr.st
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Je vois itoa employé par des utilisateurs de Devcpp, c'est pas du MS, voilà pourquoi je pense que ce genre de fonction est devenu un standard "de fait".

Merci pour cette agréable discussion.

ciao...
BruNews, MVP VC++