Pourquoi une erreur de segmentation se produit-elle après la lecture d'un seul mot?Comment séparer le délimiteur de mot d'entrée de l'utilisateur en espace en utilisant strtok
Si j'entre « pourquoi est-ce fonctionne pas »
Je ne reçoivent que
pourquoi
puis je reçois une erreur de segmentation.
J'ai vu d'autres exemples, mais aucun n'a utilisé l'entrée utilisateur comme je suis en train de faire ici. Je ne peux lire qu'un mot et ça ne marchera pas. J'ai essayé de changer tous les% c en% s mais ça ne m'aide pas. Je me rends compte également que le défaut de segmentation est pointeur pointant vers quelque part pas en mémoire mais je ne peux pas voir ce qui ne va pas avec lui. S'il vous plaît aidez-moi à comprendre.
#include <stdio.h>
#include <string.h>
int main()
{
char word[100];
printf("Enter a sentence: ");
scanf("%s", word);
char *tok = strtok(word, " ");
printf("%s\n", tok);
while(tok != NULL)
{
tok = strtok(NULL, " ");
printf("%s\n", tok);
if(tok == NULL)
printf("finished\n");
}
return 0;
}
EDIT: J'ai modifié scanf ("% s", mot); à fgets (mot, 100, stdin); et maintenant il imprime tout mais je reçois une erreur de segmentation.
'scanf ("% s ", mot);' ne sauvegarde pas les espaces dans 'word', seulement' "why" '. Utilisez 'fgets()'. – chux
@chux merci mec je l'ai changé en fgets (mot, 100, stdin) mais je reçois toujours la faute de segmentation. – Anonymous
Indice: Pourquoi le code fait-il 'printf ("% s \ n ", tok);' et _then_ vérifie-t-il si '(tok == NULL) ...'? – chux