Question

Comment insérer des chaînes dans un tableau de caractères 2D à partir d'un fichier, par exemple?

char buffert[10][30];
int i = 0;

while(!feof(somefile)) {
  fscanf(somefile, "%s", temp);
  buffert[i][] = temp;
  i++;
}

Cela ne le fera pas.

Était-ce utile?

La solution

Supprimez le temp et déposez chaque chaîne directement dans l'espace que vous avez créé (dans le cas contraire, dans le cas d'un buffert).

char buffert[10][30];
int i = 0;
FILE * fp = fopen("myfile", "r");
while(!feof(fp)) { 
  fscanf(fp, "%s", buffert[i]);
  i++;
}

Ici, le pointeur de fichier s'appelle fp. Vous devrez faire un tas de vérifications pour éviter le débordement des 10 entrées disponibles dans buffert ou des 30 caractères disponibles dans chacune de ses chaînes. Vous devriez également éviter feof ().

Autres conseils

Essayez ceci:

while(i < 10 && fscanf(somefile, "%29s%*[^ \t\n]", buffer[i]) != EOF) {
  i++;
}

Le spécificateur de format "% 29s" lit jusqu'à 29 caractères dans tampon [i] , ce qui est tout ce qu'il a d'espace pour. Le "% * [^ \ t \ n] " lit et jette les espaces non blancs, au cas où la chaîne aurait plus de 29 caractères.

De plus, while (! feof ()) {} est presque toujours la mauvaise chose à faire, car EOF n'est pas défini sur le flux jusqu'à la fin du fichier. est rencontré.

Volé dans ce forum :

#include <stdio.h>

main()
{
  int dirsize = 80;
  char array[9][dirsize];
  int linenum = 0;
  FILE *filepointer;
  filepointer = fopen("projectfile.txt","r");
  while (feof(filepointer) == 0)
  {
    linenum++;
    fgets(array[linenum], dirsize, filepointer);
  }
  fclose(filepointer);
} 

Une autre solution avec un pointeur sur les tableaux plutôt que sur les tableaux est ici.

il ne me semble pas que vous êtes en train de copier la chaîne dans un tableau. Je suis surpris qu'il compile. est-ce que je manque quelque chose?

Regardez strcpy ou strncpy, ou vous pouvez copier en utilisant des boucles for.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top