As mentioned in your other question, you're overflowing the stack. Declare read_string as static, or move it out of main().
I think that in typical operation you would read data from the EEPROM in chunks. Then process each chunk before reading from the next address.
In that sample, the 24LC16 only has 2048 bytes, so there really isn't a point in allocating 8000 bytes to read_string.