Lecture de fichier texte en tableau de char

Je vais avoir des difficultés à obtenir du texte dans un tableau de char. Il a bien fonctionné lorsque j'ai mis un statique de la taille de la matrice comme

char speech[15000];

mais qui a été inefficace, donc j'ai essayé d'utiliser calloc à la place. Que fait-il arrêter de travailler. Le tableau existe à la bonne taille, mais rien n'est écrit. Voici le code correspondant. Ce que je fais mal?

int main() {

FILE* inFile;
int i;
int count = 0;

printf("\nOpening file April_30_1789.txt\n");

inFile = fopen("./speeches/April_30_1789.txt", "r");

if(inFile == NULL) {
    printf("Could not find April_30_1789.txt\n");
    return -1;
}

char ch;

while((ch = fgetc(inFile) != EOF)) count++;

rewind(inFile);

int size = count;

printf("Size of the array is %d\n", size);

char *speech = (char *)malloc(size*sizeof(char) + 1*sizeof(char));

fscanf(inFile, "%s", speech);

printf("Closing the file.\n");
fclose(inFile);

printf("%s", speech);

printf("\n\nDone\n");

return 0;

}

Actuellement, cela me donne

Opening file April_30_1789.txt
Size of the array is 8617
Closing the file.
Fellow-Citizens

Done
  • Le fichier interne pointeur pointe toujours à la fin du fichier.
  • utiliser fseek déplacer le pointeur de fichier à la 0e offset et initialiser le compte à 0 au début
  • Pourquoi pensez-vous que l'affectation statique est inefficace quand par rapport à l'allocation dynamique? Avez-vous effectué des tests pour le prouver? Ou avez-vous peur de perdre de la mémoire lorsque vous avez moins de 15000 octets à lire? Cette question est bizarre, parce que l'affectation statique encourt moins de frais généraux que l'allocation dynamique. Si quoi que ce soit, vous voulez l'allocation dynamique de laisser votre tampon de grandir en tant que de besoin.
  • modifier &discours à la parole.
  • Eh bien, je dois utiliser ce programme avec les fichiers texte de longueur variable, alors j'ai pensé que malloc/calloc serait mieux qu'un numéro de série.
  • Juste assez. Il s'avère qu'elle n'était pas sur le rendement.
  • Lorsqu'il rencontre un espace ou '\n' il retourne

InformationsquelleAutor Gary M | 2014-03-27