When/Why is '\0' necessary to mark end of an (char) array? When/Why is '\0' necessary to mark end of an (char) array? arrays arrays

When/Why is '\0' necessary to mark end of an (char) array?


The \0 character does not mark the "end of the array". The \0 character marks the end of the string stored in a char array, if (and only if) that char array is intended to store a string.

A char array is just a char array. It stores independent integer values (char is just a small integer type). A char array does not have to end in \0. \0 has no special meaning in a char array. It is just a zero value.

But sometimes char arrays are used to store strings. A string is a sequence of characters terminated by \0. So, if you want to use your char array as a string you have to terminate your string with a \0.

So, the answer to the question about \0 being "necessary" depends on what you are storing in your char array. If you are storing a string, then you will have to terminate it with a \0. If you are storing something that is not a string, then \0 has no special meaning at all.


'\0' is not required if you are using it as character array. But if you use character array as string, you need to put '\0'. There is no separate string type in C.

There are multiple ways to declare character array.

Ex:

char str1[]    = "my string";char str2[64]  = "my string";char str3[]    = {'m', 'y', ' ', 's', 't', 'r', 'i', 'n', 'g', '\0'};char str4[64]  = {'m', 'y', ' ', 's', 't', 'r', 'i', 'n', 'g', '\0'};

All these arrays have the same string "my string". In str1 and str2 '\0' character is added automatically, but in other two, you need to explicitly add.


When/Why is '\0' necessary to mark end of an (char) array?

The terminating zero is necessary if a character array contains a string. This allows to find the point where a string ends.

As for your example that as I think looks the following way

char line[100] = "hello\n";

then for starters the string literal has 7 characters. It is a string and includes the terminating zero. This string literal has type char[7]. You can imagine it like

char no_name[] = { 'h', 'e', 'l', 'l', 'o', '\n', '\0' };

When a string literal is used to initialize a character array then all its characters are used as initializers. So relative to the example the seven characters of the string literal are used to initialize first 7 elements of the array. All other elements of the array that were not initialized by the characters of the string literal will be initialized implicitly by zeroes.

If you want to determine how long is the string stored in a character array you can use the standard C function strlen declared in the header <string.h>. It returns the number of character in an array before the terminating zero.

Consider the following example

#include <stdio.h>#include <string.h>int main(void) {    char line[100] = "hello\n";    printf( "The size of the array is %zu"            "\nand the length of the stored string \n%s is %zu\n",            sizeof( line ), line, strlen( line ) );    return 0;}

Its output is

The size of the array is 100and the length of the stored string hello is 6

In C you may use a string literal to initialize a character array excluding the terminating zero of the string literal. For example

char line[6] = "hello\n";

In this case you may not say that the array contains a string because the sequence of symbols stored in the array does not have the terminating zero.