IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

retourner une chaine en etoile


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 9
    Par défaut retourner une chaine en etoile
    bonjour je voudrais faire une fonction qui prend une chaine de caractères et la retourne en une chaine de caractères en etoile on dirait un mot de passe

    je sais que l'algorithme est plus au moins facile mais je rencontre des problèmes au niveau des fonctions le retour ect..

    d'abord j'ai essayé de faire une fonction avec le prototype char* (char *ch) qui retourne une chaine mais c'a na pas marche

    je voudrais savoir s'il est possible de retourner une chaine d'abord après j'ai change en une fonctionn void mais je rencontre encore des problèmes

    voci le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    void etoile(char *car,char *ch)
    {
        int l,i;
        l=strlen(car);
        for(i=1;i<=l;i++)
            strcat(ch,"*");
    }void main()
    {
        char *c="marron",*s;
        s=(char*)malloc(strlen(c)*sizeof(char));
        s="";
        etoile(c,s);
        printf("%s",s);
        free(s);
    }

  2. #2
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 330
    Par défaut
    Par rapport à ce que je lis dans ton code, tu veux par exemple fournir un mot de passe et le convertir pour l'afficher en remplaçant chaque caractère par une étoile '*'.

    Dans ton code je ne vois pas de return, qui indique qu'il faille retourner quelque chose à la fonction appellante.
    De plus dans ton appel de fonction main() tu ne spécifies pas de chaine de caractères qui recevrait ce que la fonction etoile() est censée retouner (dans ton exemple void indique que la fonction ne retourne rien).
    Cependant, ta fonction etoile() modifie un des paramètres passé, la chaîne "ch".

    De ce que vois ton printf() devrait afficher un nombre d'étoiles correspondant à la taille de la chaîne "car", je ne vois pas pourquoi ton printf() afficherait autre chose... peut-être qu'il faudrait avant la fin de la fonction etoile() faire un strcat(ch,'\0')...
    En effet: la fonction printf() va chercher le '\0' (indiquant la fin d'une chaîne de caractères) et si il y en a pas ça peut poser des soucis, même de GROS soucis ^^

    ...et dans ta boucle initialiser "i" à 0 et non 1 (en C les indexes, indices, positions dans une chaîne; commencent toujours par 0)... et ne sortir de la boucle que si "i" est égal à strlen(car) --> i<L au lieu de i>=L... essaye aussi de donner des noms parlants à tes variables... i, L ça ne représente rien;
    par contre "position" ou "Longueur" on sait ce que contiennent ces deux variables, on est pas en maths que diable ^^



    si s a été alloué via ton malloc() s=etoile(c) devrait être suffisant si ta fonction etoile() devenait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char* etoile(char *paramChaine)
    {
    	int cpt;
    	char *tmp=malloc(strlen(paramChaine));
    	strcpy(tmp,paramChaine);
    	for(cpt=0;cpt<strlen(paramChaine);cpt++)	
    	{
    		tmp[cpt]='*';
    	}
    	tmp[cpt]='\0';
    	return tmp;
    }
    Dans ta fonction main cela deviendrait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void main()
    {
        char *c="marron",*s;
        s=(char*)malloc(strlen(c)*sizeof(char));
        memset(s,0,strlen(c));
        s=etoile(c);
        printf("%s\n",s);
        free(s);
    }

  3. #3
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 330
    Par défaut
    Oui je pense que c'était le s="" qui posait le principal soucis... essaye plutôt memset(s,0,strlen(c))...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    void etoile(char *car,char *ch)
    {
        int l,i;
        l=strlen(car);
        for(i=0;i<l;i++)
            //strcat(ch,"*");
            ch[i]='*';
    		//strcat(ch,'\0');
    		ch[i]='\0';
    }
    void main()
    {
        char *c="marron",*s;
        s=(char*)malloc(strlen(c)*sizeof(char));
        //s="\0";  
        memset(s,0,strlen(c));
        etoile(c,s);
        printf("%s\n",s);
        free(s);
    }

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 853
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 853
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par hurukan Voir le message
    essaye plutôt memset(s,0,strlen(c))...
    Autant essayer directement memset(s, '*', strlen(c)); s[strlen(c)]='\0'. Et main() n'est pas void.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 330
    Par défaut
    Autant essayer directement memset(s, '*', strlen(c)); s[strlen(c)]='\0'. Et main() n'est pas void.
    Oui évidemment ^^

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 9
    Par défaut resolu
    merci infiniment pour votre aide j'ai bien appris l'importance du"\0"que je l'ai negligé aussi bien que la fonction memset
    merci bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. retourner une chaine de caractere
    Par acik59 dans le forum C
    Réponses: 8
    Dernier message: 19/04/2007, 15h59
  2. Retourner une chaine a une fonction C
    Par insa59 dans le forum C
    Réponses: 20
    Dernier message: 27/03/2007, 16h20
  3. Retourner une chaine de caractére
    Par insa59 dans le forum C
    Réponses: 22
    Dernier message: 23/03/2007, 17h29
  4. Réponses: 23
    Dernier message: 13/11/2006, 03h33
  5. main() qui retourne une chaine
    Par lejert dans le forum C
    Réponses: 5
    Dernier message: 19/07/2006, 09h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo