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 :

[scanf] Pourquoi la chaîne lue est-elle de taille inférieure (strlen) que le tampon alloué ?


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2016
    Messages : 7
    Points : 12
    Points
    12
    Par défaut [scanf] Pourquoi la chaîne lue est-elle de taille inférieure (strlen) que le tampon alloué ?
    Bonjour, Bonsoir

    J'ai une question un peu stupide mais je me pose cette question .

    Lorsqu'on déclare un tableau de taille 1024 par exemple et qu'on fait saisir via a un scanf("%s", chaine); et qu'on utilise la fonction strlen(chaine); elle nous renvois par exemple 9 lorsqu'on écrit au clavier via a scanf programme et pas 1023 ou 1024 pourquoi elle ne prend pas en compte le reste ?

    Merci d'avoir lu !

  2. #2
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 656
    Points : 1 680
    Points
    1 680
    Par défaut
    Hello,

    En C, les chaines de caractères se terminent par le caractère \0, qui sert aux fonctions de manipulation / recherche dans une chaine à en repérer la fin. Et strlen() ne déroge pas à la règle: pour compter le nombre de caractères, elle parcourt la chaine et s'arrête dès qu'elle trouve le \0.

    Si tu veux connaitre la taille d'une variable (la place qu'elle utilise en mémoire), il existe l'opérateur sizeof.

    Dans le cas que tu présentes, strlen(str)=9 (=10 positions occupées puisque le \0 en occupe une mais n'est pas compté comme caractère), et sizeof str =1024.

    A+

    Edgar;

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 670
    Points : 10 677
    Points
    10 677
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    sizeof str =1024.
    Je ne pariais pas là-dessus

    Étant donné qu'un tableau est "déprécié" "rapidemment" en pointeur, cela ne fonctionne pas

  4. #4
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 656
    Points : 1 680
    Points
    1 680
    Par défaut
    Citation Envoyé par foetus Voir le message
    Je ne pariais pas là-dessus
    Moi bien (je ne parle pas d'un tableau passé en paramètre):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
     
    int main(void) {
    	char str[1024];
     
    	printf("sizeof str=%u\n",sizeof str);
     
    	return(0);
    }
    Output:
    Edgar;

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2016
    Messages : 7
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Hello,

    En C, les chaines de caractères se terminent par le caractère \0, qui sert aux fonctions de manipulation / recherche dans une chaine à en repérer la fin. Et strlen() ne déroge pas à la règle: pour compter le nombre de caractères, elle parcourt la chaine et s'arrête dès qu'elle trouve le \0.

    Si tu veux connaitre la taille d'une variable (la place qu'elle utilise en mémoire), il existe l'opérateur sizeof.

    Dans le cas que tu présentes, strlen(str)=9 (=10 positions occupées puisque le \0 en occupe une mais n'est pas compté comme caractère), et sizeof str =1024.

    A+

    Edgar;
    Ok merci de ta réponse :')

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

Discussions similaires

  1. Réponses: 113
    Dernier message: 30/12/2010, 23h32
  2. Pourquoi cette variable est-elle vide ?
    Par yann18 dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2008, 10h36
  3. Réponses: 3
    Dernier message: 04/03/2007, 09h34
  4. [8086] Pourquoi la taille de segment est-elle de 64 ko ?
    Par gza.gza dans le forum Assembleur
    Réponses: 3
    Dernier message: 28/02/2007, 21h24
  5. pourquoi l'appli quitte quand elle est vide
    Par firejocker dans le forum MFC
    Réponses: 1
    Dernier message: 10/11/2005, 14h20

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