Why do I always get the last elements of my string array?

I am trying to read all strings from a text file and save them in an array of strings. However, when I try to print the contents of my string array only the last part is printed. Why does my code only copy the last string?

My code

# include <stdio.h>
# define BUFFERSIZE 100

int main(int argc, char *argv[]){
   char buffer[BUFFERSIZE];

   int i = 0;
   char *text[BUFFERSIZE];

   while(fgets(buffer, BUFFERSIZE, stdin) != NULL){
          text[i] = buffer;
          i++;
   }

   int j = 0;
   for (j=0; j<sizeof(text)/sizeof(char); i++){
          printf("%s\n", text[j]);
   }

   return 0;
}

My text file

ESD can create spectacular electric sparks (thunder and lightning is a large-scale ESD       event), but also less dramatic forms which may be neither seen nor heard, yet still be large enough to cause damage to sensitive electronic devices.
Electric sparks require a field strength above about 4 kV/cm in air, as notably occurs in lightning strikes. Other forms of ESD include corona discharge from sharp electrodes and brush discharge from blunt electrodes.

Output

>>> make 1_17; ./1_17 < example.txt
m blunt electrodes.

m blunt electrodes.

m blunt electrodes.

m blunt electrodes.

...
Jon Skeet
people
quotationmark

Look at this loop:

while(fgets(buffer, BUFFERSIZE, stdin) != NULL){
    text[i] = buffer;
    i++;
}

You're setting every element of your array to the exact same value: the value of buffer, which is a pointer to a piece of memory. On every iteration you're reading data over the top of where you read it last time.

To fix this, you'd need to allocate a new buffer on each iteration, and set the array value to a pointer to that new buffer. That way each element of the array will point to a different section of memory.

people

See more on this question at Stackoverflow