Juste pour le plaisir, j'écris un programme qui prendra une chaîne entrée par l'utilisateur (ou peut-être même un document texte) et brouiller les mots dans la chaîne.Cleaner Mise en œuvre de strtok
J'essaie d'utiliser la fonction strtok
pour séparer chaque mot de la chaîne. En ce moment, je me sens comme ma mise en œuvre actuelle de strtok
est bâclée:
int main(int argc, char *argv[])
{
char *string, *word;
if(!(string = getstr())) //function I wrote to retrieve a string
{
fputs("Error.\n", stderr);
exit(1);
}
char array[strlen(string) + 1]; //declare an array sized to the length of the string
strcpy(array, string); //copy the string into the array
free(string);
if(word = strtok(array, " "))
{
//later I'll just write each word into a matrix, not important right now.
while(word = strtok(NULL, " "))
{
//later I'll just write each word into a matrix, not important right now.
}
}
return 0;
}
Je me sens comme il doit y avoir un moyen plus propre de la mise en œuvre strtok
sans déclarer un tableau à mi-chemin à travers le programme. Cela ne me semble pas correct. Est-ce que l'utilisation du strtok
est la bonne façon de procéder? Je préfère ne pas utiliser un tableau de taille fixe, comme j'aime tout être dynamique, c'est pourquoi je commence à douter en utilisant strtok
est la bonne façon de procéder.
'free (string);' Pourquoi? Je ne vois pas de 'malloc', est-ce que' getstr() 'alloue dynamiquement de la mémoire? –
'char array [strlen (chaîne)];' doit être 'array array [strlen (chaîne) + 1];' –
@AlokSave 'getstr()' alloue de la mémoire dynamiquement. @PaulR Je viens de le mettre à jour, merci. –