Calcul de la longueur d'une chaîne en c [Fermé]

Signaler
-
Messages postés
36
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
25 janvier 2008
-
bonjour,
il faut que je calcul la longueur d'une chaîne de caractére en langage c en utilisant la fonction 'strlen'

#include<stdio.h>
#include<string.h>

main()
{
char *string;
printf("entrez une chaine de caractére:\n);fflush(stdout);
scanf("%c",&string);
printf("la chaîne est composée de %d caractéres."strlen (string));
}

pourriez vous svp m'aider à trouver mon erreur?
merci d'avance

6 réponses

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 492
Salut,

Avec ce code ça marche
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int
main ()
{
  char *chaine;
  chaine = (char *) malloc (100 * sizeof (char));
  printf ("Entrez une chaine de caractere:\n");
  fgets (chaine, 100, stdin);
  printf ("La chaine saisie est composee de %ld caractere.\n",
                  strlen (chaine) - 1);

  return 0;
}

résultat
~/trash$ ./ccm
Entrez une chaine de caractere:
une chaine de caracteres
La chaine saisie est composee de 24 caractere.
mais avec celui là non
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int
main ()
{
  char *chaine;
  chaine = (char *) malloc (100 * sizeof (char));
  printf ("Entrez une chaine de caractere:\n");
  scanf("%s",chaine);
  printf ("La chaine saisie est composee de %ld caractere.\n",
                  strlen (chaine));

  return 0;
}
résultat
~/trash$ ./ccm
Entrez une chaine de caractere:
une chaine de caractères
La chaine saisie est composee de 3 caractere.
Pourquoi?
1
Merci

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

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
36
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
25 janvier 2008
2
merci, génial ça marche
1
Merci

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

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
277
Date d'inscription
lundi 20 novembre 2006
Statut
Membre
Dernière intervention
12 avril 2018
99
Bonjour,
Un bon petit exercice pour se réveiller :
Voila ma solution (et qui fonctionne en +) :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
char *chaine;
printf("entrez une chaine de caractére: \n");
scanf("%s",chaine);
printf("la chaîne est composée de %d caractéres \n", strlen(chaine));
return EXIT_SUCCESS;
}


Voila j'espere que ca t'aidera, bye

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 492
Salut,

Voila ma solution (et qui fonctionne en +) :
mais non, ta solution ne fonctionne pas, il lui manque l'allocation de la mémoire pour ton pointeur chaine

A l'exécution il y a sûrement un Erreur de segmentation
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 198
bien, vu.
en fait phillipe, ton string est déjà un pointeur, il ne sert à rien de passer son adresse par & dans scanf
salut,
merci pour ton aide mais je suis désolé j'ai essayé et ça ne fonctionne toujours pas.
ps:je compile en c avec devc++peut être un rapport avec le logiciel?
Messages postés
1867
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
330
ça ne fonctionne toujours pas.
Quels sorte d'erreur ?
Compilation - link - execution ? Je pense que ça nous aiderait.

J'espère que tu as alloué comme l'a dit lami20j.
Messages postés
36
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
25 janvier 2008
2 >
Messages postés
1867
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014

c'est une erreur d'execution
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 492
Salut,

as-tu alloué de la mémoire pour chaine?
Par exemple
chaine = (char *) malloc(1000 * sizeof(char));
Tu peux afficher l'erreur :-), aussi ton code actuel
On comprendra mieux ce qui ne vas pas.
Messages postés
36
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
25 janvier 2008
2
salut,
Merci, ça marche mais je n'arrive pas a rentrer d'espace dans la chaine de caractéres
Messages postés
36
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
25 janvier 2008
2
voici mon code:
#include<stdio.h>
#include<string.h>

main()
{
char*chaine;
chaine = (char *) malloc(100* sizeof(char));
printf("Entrez une chaine de caractere:\n");
scanf("%s",chaine);
printf("La chaine saisie est composee de %d caractere.",strlen(chaine));
scanf("%d",chaine);
}
Messages postés
1867
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
330
Normalement les espaces sont bien comptés.

scanf("%d",chaine);
Qu'as tu voulu faire ici ??? chaine n'est pas un entier...
Messages postés
1867
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
330
Tu as raison, j'avais déjà oublié !

http://www.cplusplus.com/reference/cstdio/scanf/

String of characters. This will read subsequent characters until a whitespace is found (whitespace characters are considered to be blank, newline and tab).