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
Vous devez vous connecter pour publier un commentaire.
Double Possible de La lecture du fichier texte dans un tableau de char en C.
Votre problème :
fscanf
avec le"%s"
format de le lire jusqu'au premier espace rencontré.Solution Possible (vérification des erreurs est omis pour alléger le texte) :
fscanf
avec le"%s"
format de le lire jusqu'au premier espace rencontré. Par exemple si j'utilise votre code pour l'impression de mes principaux.c un fichier, seulement#include
est imprimé.fread
permettra de garder la mise en forme. Oh et en passant, cette lignewhile((ch = fgetc(inFile) != EOF)) count++;
devrait être réécrit commewhile((ch = fgetc(inFile)) != EOF) count++;
.Votre pointeur de fichier
inFile
vers la finJe ferais quelque chose comme suit :
comme pmg dit
while((ch = fgetc(inFile) != EOF)) count++;
rend votre pointeur de fichier de point à la fin, l'utilisationrewind(FILE* fileptr);
pour revenir au début du fichier.fscanf(inFile, "%s", &speech);
àfscanf(inFile, "%s", speech);