Caster un int dans un char (char * ?)

cs_snoop44 Messages postés 9 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 23 septembre 2011 - 18 oct. 2010 à 20:03
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 19 oct. 2010 à 10:11
Bonjour a tous !

Voila mon petit soucis : Je souhaite "caster" un int pour l'écrire dans un char* avant de faire appel a une fonction qui requiert un argument de type char (La fonction écrit dans un fichier).

Voici mon code :

int main(void)
{
    short int resultat;
    short int *presultat;
    char *value_to_add="nouvel essai\n", *value2="essai";
    int i;
    resultat=10;
    presultat = &resultat;
    fadd(nom_fichier,value_to_add,presultat);
    for (i=1; i<6; i++)
    {
        //sprintf(*value_to_add,"%d",1);
        //*value_to_add=(char)i;
        fadd(nom_fichier,value_to_add,presultat);
        fadd(nom_fichier,value2,presultat);
    printf("%d",i);
    }
    printf("Resulat de la fonction : %d",resultat);
}


plus precisement le probleme est ici :

for (i=1; i<6; i++)
    {
        //sprintf(*value_to_add,"%d",1);
        //*value_to_add=(char)i;
        fadd(nom_fichier,value_to_add,presultat);
        fadd(nom_fichier,value2,presultat);
    printf("%d",i);
    }


J'ai essayé pas mal de chose sprintf,plusierus formes d'égalités, le cast. Rien a faire j'ai toujours un segmentation fault. Quelqun a t'il une idée ?

Merci encore

6 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
18 oct. 2010 à 21:13
Salut,

Pour convertir un int en char * essaye plutot d'utiliser itoa(...).

Shell
0
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
18 oct. 2010 à 21:24
itoa n'est pas standard contrairement à sprintf ou snprintf.

Par contre le pointeur passé à sprintf DOIT être initialisé via un malloc ou un tableau. Le * n'a pas de sens dans ton code commenté.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 oct. 2010 à 21:30
Au moins il saura qu'existe itoa(), restera ensuite à choisir entre l'efficace et le standard.

ciao...
BruNews, MVP VC++
0
cs_snoop44 Messages postés 9 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 23 septembre 2011
18 oct. 2010 à 21:35
Merci pour les reponses.
Fervant utilisateur de linux, je ne dispose pas de la fonction itoa. Je vais essayer avec malloc.

En revanche pour la declaration par tableau, est ce que *valeur="texte"; ne declare t'il pas d'office un tableau de char ?
0

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

Posez votre question
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
18 oct. 2010 à 21:43
Pas du tout en fait ça initialise ton pointeur vers une chaine constante. Faudrait plutôt faire const char *valeur="texte";

Si t'es sur linux, essaye de compiler avec -Wall ton compilateur t'aidera un peu.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 oct. 2010 à 10:11
itoa n'est pas standard contrairement à sprintf ou snprintf

Ça fait plaisir des gens soucieux du standard et de la portabilité !

Si tu sais que ton chiffre ne sera jamais très grand, tu peux aussi utiliser un buffer de taille statique, plutôt qu'un malloc.

Attention, non testé:
int main(void)
{
    short int resultat;
    char value_to_add[256];
    int i;

    resultat = 10;
    fadd(nom_fichier, value_to_add, &resultat);
    for (i = 1; i < 6; ++i)
    {
        sprintf(value_to_add, "%d", i);
        fadd(nom_fichier, value_to_add, &resultat);
        /*fadd(nom_fichier, value2, &resultat);*/
        printf("%d",i);
    }
    printf("Resulat de la fonction : %d", resultat);
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Rejoignez-nous