2010-08-10 8 views
0

Pourquoi mon strtok casse mes chaînes après l'espace lorsque j'ai spécifié mon délimiteur comme ","?strtok utilise un mauvais délimiteur

+3

Pourriez-vous poster un exemple, s'il vous plaît? –

+0

Eh bien oui, trop tôt pour deviner le problème: P –

+0

J'utilise strtok pour lire un fichier texte séparé par des virgules et spécifié "," comme délimiteur mais je ne suis pas en train de me donner "Jeremy Whitfield" en retournant seulement "Jeremy" – svenus

Répondre

7

Je peux seulement suggérer que vous faites quelque chose de mal, mais il est un peu difficile de dire exactement quoi (vous devriez généralement poster votre code lorsque vous posez des questions spécifiques). Des exemples de programmes, comme les suivants, semblent fonctionner correctement:

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

int main (void) { 
    char *s; 
    char str[] = 
     "This is a string," 
     " with both spaces and commas," 
     " for testing."; 
    printf ("[%s]\n", str); 
    s = strtok (str, ","); 
    while (s != NULL) { 
     printf (" [%s]\n", s); 
     s = strtok (NULL, ","); 
    } 
    return 0; 
} 

Il produit:

[This is a string, with both spaces and commas, for testing.] 
    [This is a string] 
    [ with both spaces and commas] 
    [ for testing.] 

La seule possibilité qui vient à l'esprit est immédiatement si vous utilisez " ," au lieu de ",". Dans ce cas, vous obtiendrez:

[This is a string, with both spaces and commas, for testing.] 
    [This] 
    [is] 
    [a] 
    [string] 
    [with] 
    [both] 
    [spaces] 
    [and] 
    [commas] 
    [for] 
    [testing.] 
0

Merci! J'ai regardé autour et j'ai compris que le problème était avec mon scanf qui ne lisait pas toute la ligne que l'utilisateur entre. Il semble que mon strtok fonctionnait bien mais la valeur que j'utilise pour correspondre à la valeur de retour de strtok est fausse. Par exemple, ma fonction strtok prend "Jeremy whitfield, Ronny Whifield" et me donne "Jeremy Whitfield" et "Ronny Whitfield". Dans mon programme, j'utilise scanf pour saisir l'entrée de l'utilisateur> "Ronny Whitfield" qui est en fait seulement en train de lire "Ronny". Donc c'est un problème avec mon scanf pas strtok. Ma machine virtuelle se bloque chaque fois que je l'ouvre, donc je ne peux pas accéder à mon code pour le moment.

+0

Je suis juste content que vous utilisiez C et pas d'autres conneries. –

+0

En aparté, vous devriez _never_ utiliser 'scanf' pour entrer une chaîne dont vous ne contrôlez pas la taille. Cela demande des problèmes en termes de dépassements de tampon. Soit 'scanf' avec une longueur spécifique, soit' fgets' avec une longueur maximum (ce dernier est ma préférence). – paxdiablo