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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2016
    Messages : 7
    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 Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 792
    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 confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 774
    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 774
    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 Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 792
    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 habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2016
    Messages : 7
    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