2009-01-20 7 views
1

Je souhaite copier des lignes de stdin vers un tableau de pointeurs de caractères. Par exemple, si l'utilisateur est entré dans ce qui suit « le \ nPublication express \ nbrown \ nfox » je voudrais avoir un tableau qui ressembleCopie de lignes de stdin vers un tableau de pointeurs de caractères

arr [0] = « la » arr [1] = « rapide » arr [2] = "marron" arr [3] = "renard"

Des pointeurs?

Répondre

1

Vous devez vous assurer que vous avez alloué non seulement un tableau de pointeurs, mais également de l'espace alloué pour chacun de vos éléments. Je ne vérifie pas les pointeurs NULL comme vous devriez l'être, mais cela devrait vous aider à démarrer.

char **arr; 
int maxWords = 3; 
int i; 

arr = malloc (sizeof (char *) * maxWords); 

for (i = 0; i < maxWords; i++) 
{ 
    arr[i] = malloc (100); 
    fgets (arr[i], 99, stdin); 
} 

après, vous devrez libérer cette mémoire trop:

for (i = 0; i < maxWords; i++) 
{ 
    free (arr[i]) 
} 
free (arr); 
+0

Pas juste - il montre 4 mots et vous n'attribuez que 3! : D –

+0

En outre, vous gaspillez un octet avec fgets() - il est sain d'esprit et vous pouvez utiliser 100 en toute sécurité. –

1

Utilisez getchar() dans une boucle pour obtenir l'entrée caractère par caractère. Ajoutez le caractère à la chaîne en cours dans la boucle, et lorsque le caractère en cours est un saut de ligne, lancez une nouvelle chaîne au lieu d'ajouter le caractère.

Je vais vous laisser imaginer le reste, et si vous avez une question plus spécifique sur le problème, posez-le.

Des pointeurs?

0x3A28213A, 0x6339392C, 0x7363682E.

1

Vous avez besoin d'un tableau de pointeurs de caractère et un peu d'espace pour eux pour pointer vers - c'est un ou plusieurs tableaux de caractères aussi .. Il existe une multitude de possibilités sur la façon de le faire, allant de l'allocation dynamique aux tableaux alloués statiquement. Combien de temps les lignes doivent-elles être? Cela dépend de ce que votre environnement est. (J'ai dû corriger un bogue dans l'un de mes programmes parce qu'il a échoué quand j'ai utilisé un tampon de 4096 octets pour la longueur de la ligne, mais au moins une des lignes d'entrée avait plus de 5000 octets. ! de nouvelles lignes dans les données, et quitté la boucle quand la réponse est zéro - non pas à cause d'un dépassement de mémoire tampon)

une option, non mentionné dans d'autres solutions (jusqu'à présent):

  • utilisation mmap () pour faire une carte privée du fichier en mémoire.
  • analyse la mémoire mappée pour mettre une valeur nulle à la place de chaque nouvelle ligne.
  • assurez-vous que vous avez des pointeurs pour le début de la chaîne et immédiatement après chaque caractère qui était un saut de ligne mais qui est maintenant nul.
+0

Ceci est surtout une suggestion de blague - bien que ce serait faire le travail si le tableau de pointeurs de caractères était assez grand. –

Questions connexes