This is just an initializer list for an array. So it's very like the normal syntax:

char buf[5] = { 1, 2, 3, 4, 5 };

However, the C standard states that if you don't provide enough elements in your initializer list, it will default-initialize the rest of them. So in your code, all elements of buf will end up initialized to 0.

printf doesn't display anything because buf is effectively a zero-length string.

Answer from Oliver Charlesworth on Stack Overflow
🌐
Sololearn
sololearn.com › en › Discuss › 2111320 › what-is-0-in-c-language-and-what-is-its-use-with-example-please
What is \0 in C language and what is it's use? (with example please). | Sololearn: Learn to code for FREE!
'\0' is referred to as NULL character or NULL terminator It is the character equivalent of integer 0(zero) as it refers to nothing In C language it is generally used to mark an end of a string. example string a="Arsenic"; every character stored ...
🌐
PW Skills
pwskills.com › blog › cpp › 0 in c++: how does the -‘0′ and +’0’ work in c?
0 In C++: How Does The -'0' And +'0' Work In C?
November 4, 2025 - This is particularly common in ... denote failure or absence of valid data. ... In this example, myFunction() returns 0 to indicate that it executed successfully....
People also ask

What is the significance of '0' in C++ programming?
'0' in C++ plays a crucial role in character-to-integer and integer-to-character conversions using the '-' and '+' operators, respectively. These conversions are essential for manipulating digit characters and integers efficiently.
🌐
pwskills.com
pwskills.com › blog › cpp › 0 in c++: how does the -‘0′ and +’0’ work in c?
0 In C++: How Does The -'0' And +'0' Work In C?
In what scenarios is '0' commonly used in C++ arrays?
'0' is frequently used in array initialization, comparison, and termination. It initializes all elements of an array to 0, compares individual elements to check for zero values, and terminates C-style strings with the null character '\0'.
🌐
pwskills.com
pwskills.com › blog › cpp › 0 in c++: how does the -‘0′ and +’0’ work in c?
0 In C++: How Does The -'0' And +'0' Work In C?
Why is nullptr preferred over '0' for null pointers in modern C++ code?
nullptr is a type-safe alternative introduced in C++11, explicitly denoting a null pointer. Unlike '0', which is an integer literal, nullptr helps prevent unintended conversions and ambiguities in overloaded functions or templates, making code more robust and readable.
🌐
pwskills.com
pwskills.com › blog › cpp › 0 in c++: how does the -‘0′ and +’0’ work in c?
0 In C++: How Does The -'0' And +'0' Work In C?
🌐
Quora
quora.com › What-is-use-of-0-in-the-C-programming-language
What is use of \0 in the C programming language? - Quora
Answer (1 of 8): In C, \0, aka NUL character is conventionally used as string terminator, so one doesn’t need to explicitly store string length but can compute it by figuring out the position of NUL character. For more information see Null character.
🌐
Idallen
teaching.idallen.com › c_programming › differentWaysToWriteZero.html
Different Ways to Write Zero in C
Updated: 2003-01-19 05:50 · Please be clear on the different ways of saying "zero" in C:
Find elsewhere
🌐
GeeksforGeeks
geeksforgeeks.org › c language › difference-between-null-pointer-null-character-0-and-0-in-c-with-examples
Difference between NULL pointer, Null character ('\0') and '0' in C with Examples - GeeksforGeeks
July 15, 2025 - This 0 is then referred to as a null pointer constant. The C standard defines that 0 is typecast to (void *) is both a null pointer and a null pointer constant. The macro NULL is provided in the header file "stddef.h".
🌐
LabEx
labex.io › questions › what-is-the-purpose-of-return-in-c-136074
What is return 0 in C | LabEx
The convention in C is that a return value of 0 indicates successful program termination, while a non-zero value indicates some kind of error or abnormal termination. The specific non-zero values can be used to provide more detailed information ...
🌐
Codedamn
codedamn.com › news › c programming
What is \ 0 (null byte) in C? Explained with examples.
November 9, 2023 - Let's consider an example. Imagine the string "hello" stored in memory. It would look something like: ... However, without the null terminator, there would be no definitive way to tell where the string ends. This could lead to reading unintended data or even accessing restricted memory areas. Neglecting to terminate strings with \0 can lead to undefined behavior.
🌐
Reddit
reddit.com › r/learnprogramming › [ removed by moderator ]
What is '0' in char C programing : r/learnprogramming
January 6, 2021 - The character '0' actually has the representation of decimal 48 (or hex 0x30). '1' is 49, '2' is 50, and so on. So when we convert '2' to an integer we get 50. When we subtract '0' (or 48) we end up with the integer value 2.
🌐
Yeldar
yeldar.org › blog › zero-in-c
Zero in C – Yeldar Kudaibergen
In conditional statements (such as if, while, etc.), the value 0 is interpreted as "false," while any non-zero value is interpreted as "true." For example, if (0) will always evaluate to "false", and the code block inside this statement will not be executed.
🌐
Reddit
reddit.com › r/c_programming › what does "return 0" actually do?
r/C_Programming on Reddit: What does "return 0" actually do?
November 23, 2023 -

Edit: I think I understand it better now. Thaks to all of those whom where able to explain it in a way I could understand.

I tried searching about it on the internet and I read a few answers in stack overflow and some here on reddit and I still don`t understand what it does. Not even the book I'm using now teaches it properly. People, and the book, say that it returns a value to indicate that the program has ran sucessfuly. But I don't see any 0 being printed. Where does it go?

If it is "hidden", how can I visualize it? What is the purpose of that if, when there is an error, the compiler already warns us about it?

🌐
Digibeatrix
cmastery.digibeatrix.com › ホーム › understanding “0”, null, and ‘\0’ in c: key differences and best practices
Understanding "0", NULL, and '\0' in C: Key Differences and Best Practices - C言語ナビゲーター~システム開発のための最強リソース~
August 9, 2025 - When handling a string literal as an array, the C compiler automatically appends the null terminator “\0”. For example, in char str[] = "Hello";, the compiler appends “\0” at the end of the array, storing it in memory as H-e-l-l-o-\0 ...
🌐
Medium
medium.com › @veranjali2503 › understanding-return-0-in-c-programming-10e8512edb1d
Understanding return 0; in C Programming | by Anjali Verma | Medium
March 24, 2025 - A return value of 0 typically means success, while any non-zero value indicates an error. Developers can return specific non-zero values to represent different types of errors. Example: return 1; for a file not found error, return 2; for memory ...
Top answer
1 of 11
443

Note: This answer applies to the C language, not C++.


Null Pointers

The integer constant literal 0 has different meanings depending upon the context in which it's used. In all cases, it is still an integer constant with the value 0, it is just described in different ways.

If a pointer is being compared to the constant literal 0, then this is a check to see if the pointer is a null pointer. This 0 is then referred to as a null pointer constant. The C standard defines that 0 cast to the type void * is both a null pointer and a null pointer constant.

Additionally, to help readability, the macro NULL is provided in the header file stddef.h. Depending upon your compiler it might be possible to #undef NULL and redefine it to something wacky.

Therefore, here are some valid ways to check for a null pointer:

if (pointer == NULL)

NULL is defined to compare equal to a null pointer. It is implementation defined what the actual definition of NULL is, as long as it is a valid null pointer constant.

if (pointer == 0)

0 is another representation of the null pointer constant.

if (!pointer)

This if statement implicitly checks "is not 0", so we reverse that to mean "is 0".

The following are INVALID ways to check for a null pointer:

int mynull = 0;
<some code>
if (pointer == mynull)

To the compiler this is not a check for a null pointer, but an equality check on two variables. This might work if mynull never changes in the code and the compiler optimizations constant fold the 0 into the if statement, but this is not guaranteed and the compiler has to produce at least one diagnostic message (warning or error) according to the C Standard.

Note that the value of a null pointer in the C language does not matter on the underlying architecture. If the underlying architecture has a null pointer value defined as address 0xDEADBEEF, then it is up to the compiler to sort this mess out.

As such, even on this funny architecture, the following ways are still valid ways to check for a null pointer:

if (!pointer)
if (pointer == NULL)
if (pointer == 0)

The following are INVALID ways to check for a null pointer:

#define MYNULL (void *) 0xDEADBEEF
if (pointer == MYNULL)
if (pointer == 0xDEADBEEF)

as these are seen by a compiler as normal comparisons.

Null Characters

'\0' is defined to be a null character - that is a character with all bits set to zero. '\0' is (like all character literals) an integer constant, in this case with the value zero. So '\0' is completely equivalent to an unadorned 0 integer constant - the only difference is in the intent that it conveys to a human reader ("I'm using this as a null character.").

'\0' has nothing to do with pointers. However, you may see something similar to this code:

if (!*char_pointer)

checks if the char pointer is pointing at a null character.

if (*char_pointer)

checks if the char pointer is pointing at a non-null character.

Don't get these confused with null pointers. Just because the bit representation is the same, and this allows for some convenient cross over cases, they are not really the same thing.

References

See Question 5.3 of the comp.lang.c FAQ for more. See this pdf for the C standard. Check out sections 6.3.2.3 Pointers, paragraph 3.

2 of 11
45

It appears that a number of people misunderstand what the differences between NULL, '\0' and 0 are. So, to explain, and in attempt to avoid repeating things said earlier:

A constant expression of type int with the value 0, or an expression of this type, cast to type void * is a null pointer constant, which if converted to a pointer becomes a null pointer. It is guaranteed by the standard to compare unequal to any pointer to any object or function.

NULL is a macro, defined in as a null pointer constant.

\0 is a construction used to represent the null character, used to terminate a string.

A null character is a byte which has all its bits set to 0.