Domanda

Come posso inserire stringhe in un array di caratteri 2D da (ad esempio) un file?

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

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

Questo non lo farà.

È stato utile?

Soluzione

Elimina la temp e rilascia ogni stringa direttamente nello spazio che hai creato (in questo caso in buffert).

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

Qui il puntatore al file si chiama fp. Dovrai fare un sacco di controlli per evitare di traboccare le 10 voci disponibili in buffert o i 30 caratteri disponibili in ciascuna delle sue stringhe. Dovresti anche evitare feof ().

Altri suggerimenti

Prova questo:

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

L'identificatore di formato "% 29s " legge fino a 29 caratteri nel buffer [i] , che è tutto ciò che ha spazio. Il "% * [^ \ t \ n] " legge e butta via gli spazi non bianchi, nel caso in cui la stringa fosse più lunga di 29 caratteri.

Inoltre, while (! feof ()) {} è quasi sempre la cosa sbagliata da fare, poiché EOF non è impostato sullo stream fino alla fine del file è stato rilevato.

Rubato da questo 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);
} 

Un'altra soluzione con un puntatore ad array invece di array di array è qui.

non mi sembra che stai COPIANDO la stringa in un array. Sono sorpreso che si compili. mi sto perdendo qualcosa?

guarda strcpy o strncpy, oppure puoi copiarlo usando per i cicli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top