Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How many chars can be in a char array?

Tags:

#define HUGE_NUMBER ???  char string[HUGE_NUMBER]; do_something_with_the_string(string); 

I was wondering what would be the maximum number that I could add to a char array without risking any potential memory problems, buffer overflows or the like. I wanted to get user input into it, and possibly the maximum possible.

like image 583
user666010 Avatar asked Mar 18 '11 12:03

user666010


People also ask

How long can a char array be?

While 65,535 is a standard-specified minimum, a really small device could specify that the standard was deliberately departed from for this reason.

How many characters can a char have?

The length of a CHAR column is fixed to the length that you declare when you create the table. The length can be any value from 0 to 255.

What is the maximum size of char array in C?

The maximum allowable array size is 65,536 bytes (64K). Reduce the array size to 65,536 bytes or less.

How many characters is a char in C?

Use of Character Set in C The C language provides support for about 256 characters.


2 Answers

See this response by Jack Klein (see original post):

The original C standard (ANSI 1989/ISO 1990) required that a compiler successfully translate at least one program containing at least one example of a set of environmental limits. One of those limits was being able to create an object of at least 32,767 bytes.

This minimum limit was raised in the 1999 update to the C standard to be at least 65,535 bytes.

No C implementation is required to provide for objects greater than that size, which means that they don't need to allow for an array of ints greater than (int)(65535 / sizeof(int)).

In very practical terms, on modern computers, it is not possible to say in advance how large an array can be created. It can depend on things like the amount of physical memory installed in the computer, the amount of virtual memory provided by the OS, the number of other tasks, drivers, and programs already running and how much memory that are using. So your program may be able to use more or less memory running today than it could use yesterday or it will be able to use tomorrow.

Many platforms place their strictest limits on automatic objects, that is those defined inside of a function without the use of the 'static' keyword. On some platforms you can create larger arrays if they are static or by dynamic allocation.

Now, to provide a slightly more tailored answer, DO NOT DECLARE HUGE ARRAYS TO AVOID BUFFER OVERFLOWS. That's close to the worst practice one can think of in C. Rather, spend some time writing good code, and carefully make sure that no buffer overflow will occur. Also, if you do not know the size of your array in advance, look at malloc, it might come in handy :P

like image 139
Greg Avatar answered Sep 25 '22 19:09

Greg


It depends on where char string[HUGE_NUMBER]; is placed.

  • Is it inside a function? Then the array will be on the stack, and if and how fast your OS can grow stacks depends on the OS. So here is the general rule: dont place huge arrays on the stack.

  • Is it ouside a function then it is global (process-memory), if the OS cannot allocate that much memory when it tries to load your program, your program will crash and your program will have no chance to notice that (so the following is better:)

  • Large arrays should be malloc'ed. With malloc, the OS will return a null-pointer if the malloc failed, depending on the OS and its paging-scheme and memory-mapping-scheme this will either fail when 1) there is no continuous region of free memory large enough for the array or 2) the OS cannot map enough regions of free physical memory to memory that appears to your process as continous memory.

So, with large arrays do this:

char* largeArray = malloc(HUGE_NUMBER); if(!largeArray) { do error recovery and display msg to user } 
like image 23
Bernd Elkemann Avatar answered Sep 25 '22 19:09

Bernd Elkemann