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
Répondre
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.]
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.
Je suis juste content que vous utilisiez C et pas d'autres conneries. –
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
- 1. strtok avec délimiteur d'espace
- 2. Comportement de strtok() inattendu
- 3. C++ strtok problème
- 4. strtok et la fonction appel
- 5. CakePHP Model utilise les mauvais champs dans les instructions SQL!
- 6. strtok - dépassement de mémoire tampon
- 7. strtok n'accepte pas: char * str
- 8. J'essaye de diviser une chaîne par un délimiteur mais ça ne marche pas, pourquoi?
- 9. insérer des valeurs avec un délimiteur différent
- 10. Supprimer en utilisant un délimiteur différent
- 11. Délimiteur Ruby YAML
- 12. Puis-je utiliser strtok() dans un module de noyau Linux?
- 13. mysql changeant délimiteur
- 14. Délimiteur de scanner Java
- 15. sécurité de fil de fonction strtok
- 16. Utilisation de strtok() sur une chaîne allouée?
- 17. Comment diviser une chaîne avec un délimiteur plus grand qu'un seul caractère?
- 18. C: strtok sur pointeur dans une struct
- 19. Un mauvais index clusterisé recherche la performance?
- 20. SetPosition obtient un mauvais résultat
- 21. FindControl renvoyant un mauvais contrôle?
- 22. Délimiteur ID unique d'ASP.NET Control
- 23. Java Scanner avec délimiteur vide
- 24. iFrames mauvais ou bon?
- 25. Séparer une chaîne et obtenir un délimiteur en retour ainsi
- 26. Diviser une chaîne par un délimiteur en python
- 27. Définir un délimiteur AWK pour analyser la sortie "airport -s"
- 28. Comment détecter un délimiteur dans une chaîne en PHP?
- 29. vraiment mauvais
- 30. vsTestHost.exe utilise un seul processeur
Pourriez-vous poster un exemple, s'il vous plaît? –
Eh bien oui, trop tôt pour deviner le problème: P –
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