Inserimento di stringhe in un chararray 2D in C
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à.
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.