size of char array in c

i have to store a data more than 100000.
i don't know the size of the data whether it may be 100000 or 1000000.
so how can i define variable size;
example
char abc[1000000];
but i don't know the size so how can i give array size??
in one sentence
how can i give the array size dynamically so that i can store the data from 1 to an infinte characters
thank u
sree

#include <stdlib.h>

char *storage=NULL;
storage=malloc(num_of_bytes + 1);
if(storage==NULL)
{
     perror("memory error");
     exit(1);
}
/* play with storage here 
*
*/
free(storage);

thank u,
ok but we don't know the value of num_of_bytes value?
actually iam reading from webpage using curl socket.i don't know how much data it amy come.
so please show me the solution

Your expectations are unrealistic. No computer has an infinite amount of memory. The best you can do is allocate some finite space, process it, and then process the next portion of an infinite input.

Jim Mcnamara's code will allow you to declare arrays of variable size. I think you may be saying is that you don't know the amount of memory up front. If that is the case, you can allocate a reasonable amount of memory and try to reallocate (man realloc()) a larger chunk when you find you need more space.

Two basic solutions

  1. keep reading in 512 byte buffers and make a linked list of those buffers where the struct looks something like

struct buffer { struct buffer *next; long length; unsigned char data[512]; };

  1. allocate a block using malloc of length 512 bytes and read into that, if you did not fill the buffer then read again in the remaining space
    if you get a read of zero bytes then that is the end of stream indicator
    else you still have more to read, reallocate the ptr with a size+=512, and go back to reading again.

If you read from socket HTTP/1.1 response then you can determine the size of the data from Content-Length header. But be aware of chunked responses, i.e.

HTTP/1.1 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/plain
Transfer-Encoding: chunked

1a; ignore-stuff-here
abcdefghijklmnopqrstuvwxyz
10
1234567890abcdef
0
some-footer: some-value
another-footer: another-value
[blank line here]

what corresponds to

HTTP/1.1 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/plain
Content-Length: 42
some-footer: some-value
another-footer: another-value

abcdefghijklmnopqrstuvwxyz1234567890abcdef

see RFC 2616

There is no guarantee every webserver uses HTTP/1.1.