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 :

Représentation du caractère espace


Sujet :

C

  1. #1
    elm
    elm est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Représentation du caractère espace
    Bonjour, j'utilise la fonction strtok pour séparer un string (dont les mots sont séparés par des espaces) en tokens.
    Je dois donc définir le delimiter entre les mot.
    Comment représente-t-on la caractère d'espace ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const char * delimiter = "\s";
    char * nextToken = strtok(command, delimiter);
    J'ai testé "\s" mais il n'a pas l'air de le prendre...
    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    " "
    D'autres questions ?

  3. #3
    elm
    elm est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Ok merci...
    Oui j'ai une autre question sur mon code ci-dessous :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    char * command = (char *) malloc (MAXCOMMANDSIZE*sizeof(char)); 
    if ((getline(&command, &length, stdin)) == -1)
    { perror("Erreur"); exit(EXIT_FAILURE); }
    if (strcasecmp (nextToken, "WRITE") == 0)
    		{
    			int write = 1;
    			nextToken = strtok(NULL, delimiter); 
    			if (nextToken == NULL)
    			{
    				printf("Error : too few arguments with command WRITE"); 
    				exit(EXIT_FAILURE);
    			}
    			else
    			{
    				int pidThread = strtol(nextToken, (char **)NULL, 10); // Conversion de l'entree en entier (1er argument de WRITE : pid du thread)
    				char * nextToken2 = strtok(NULL, delimiter); 
    				if (nextToken2 == NULL)
    				{
    					printf("Error : too few arguments with command WRITE"); 
    					exit(EXIT_FAILURE);
    				}
    				else
    				{
    					int blocNumber = strtol(nextToken2, (char **)NULL, 10);
    					char * nextToken3 = strtok(NULL, delimiter); 
    					if (nextToken3 == NULL)
    					{
    						printf("Error : too few arguments with command WRITE"); 
    						exit(EXIT_FAILURE);
    					}
    					else
    					{				
    						int data = strtol(nextToken3, (char **)NULL, 10); 
     
    bla bla bla...
    Je voudrais savoir si l'utilisation de la fonction strtok() aux appels suivant est correcte, dans le sens où je veux déclarer un nouveau pointeur qui stoque l'élément suivant à chaque fois. Et vu qu'on doit mettre NULL en argument aux appels suivants dans un strtok(), comment être sûr qu'il effectue bien cette fonction sur mon pointeur command de départ ?

    Merci d'avance

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Et vu qu'on doit mettre NULL en argument aux appels suivants dans un strtok(), comment être sûr qu'il effectue bien cette fonction sur mon pointeur command de départ ?
    Il travaillera sur la chaîne de caractères passée la première fois jusqu'à ce qu'il rende NULL. Ensuite, il aura terminé. Je ne vois pas le premier appel qui devrais être fait...

    Par contre, venant de la page manuel:
    évitez au maximum d'utiliser cette fonction. Sinon, prenez note des informations suivantes :

    Cette fonction modifie son premier argument.

    Les caractères de séparation sont surchargés, leur identité est donc perdue.

    Cette fonction ne doit pas être invoquée sur une chaîne constante.

    La fonction strtok() utilise un buffer statique et n'est donc pas sûre dans un contexte multithread. Dans ce cas il vaut mieux utiliser strtok_r().
    Et j'ai l'impression que tu utilises des threads donc il faudrait mieux utiliser strtok_r...

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    le premier argument de strtok doit être la chaine puis les appels suivants NULL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strtok (chaine, delim);
    strtok (NULL, delim);
     
    /* etc... */
    Le plus sage serais même de faire une copie de la chaine et bosser sur cette copie car strtok modifie la chaine, si je me trompe pas elle ajoute \0 à chaque appel !

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    si je me trompe pas elle ajoute [b]\0|/b] à chaque qppel !
    Tu ne te trompes pas

Discussions similaires

  1. script shell: problème avec le caractère espace
    Par Le fut dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 04/05/2017, 11h49
  2. des caractères espaces en 1
    Par raph707 dans le forum Langage
    Réponses: 16
    Dernier message: 27/02/2007, 13h26
  3. Problemes avec les caractères 'espace' !
    Par gui38 dans le forum Langage
    Réponses: 12
    Dernier message: 08/01/2007, 13h40
  4. Boucle sur fichiers et le caractère espace
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 11/10/2006, 16h53
  5. caractère espace dans un lien ?
    Par kayser dans le forum ASP
    Réponses: 2
    Dernier message: 20/04/2004, 09h52

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