Reading text file into char array
arrays, c, char
Solution
Possible duplicate of Reading the whole text file into a char array in C.
Your problem : `fscanf` with the `"%s"` format will read up to the first whitespace encountered.
Possible solution (error-checking is omitted for conciseness) :
#include <stdio.h> /* printf */
#include <stdlib.h> /* fopen, fseek, ... */
char *buffer = NULL;
size_t size = 0;
/* Open your_file in read-only mode */
FILE *fp = fopen("your_file_name", "r");
/* Get the buffer size */
fseek(fp, 0, SEEK_END); /* Go to end of file */
size = ftell(fp); /* How many bytes did we pass ? */
/* Set position of stream to the beginning */
rewind(fp);
/* Allocate the buffer (no need to initialize it with calloc) */
buffer = malloc((size + 1) * sizeof(*buffer)); /* size + 1 byte for the \0 */
/* Read the file into the buffer */
fread(buffer, size, 1, fp); /* Read 1 chunk of size bytes from fp into buffer */
/* NULL-terminate the buffer */
buffer[size] = '\0';
/* Print it ! */
printf("%s\n", buffer);
Problem
I'm having some trouble getting text into a char array. It worked fine when I set a static size for the array like ``` char speech[15000]; ``` but that was inefficient so I tried using calloc instead. That made it stop working. The array exists at the right size, but nothing gets written in. Here's the relevant code. What am I doing wrong? ``` 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; } ``` Currently, this gives me ``` Opening file April_30_1789.txt Size of the array is 8617 Closing the file. Fellow-Citizens Done ```