Daniel
Daniel

Reputation: 1414

What happens in C when you print a declared, but unassigned variable?

Why does the following snippet cause random numbers to print to the screen with printf, but putchar always outputs 1?

#include <stdio.h>

int main() {
    char c;

    printf("%d\n", c );
    putchar(c);
}

Upvotes: 1

Views: 1667

Answers (2)

Code Man
Code Man

Reputation: 105

1) The c variable first has a random value(default/garbage value) to itself as you declared-but-did-not-initialize your char c to any defined letter or value of ur interest(character).
2) Next you tried to printf the %d(digit/decimal/numerical value) of the char c, so now it is giving you a converted value of the garbage which was earlier assigned to c when you declared the char c in the first place.
3) Finally you tried to use putchar(c), which again behaves similarly because your char c is uninitialized and is still being read thereby re-trying to manage with an undetermined value to be printed onto the screen. (since the same un-initialized character variable c is being passed to both kind of printing as a parameter).

Yes these 3 statements are a bit clumsy to understand but they are as layman as it can get to help speed-up some understanding regarding this query of yours.

Pay attention to the 1st comment response to your question by @bluemoon. Those 3 words alone litterally have a huge amount of sensibility and meaningfull-ness to them, to a point that it also tells you what you have done erroneous in your own code(your actions)."UNDEFINED"(try relating the same with UNINITIALIZED).

Upvotes: 2

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726669

According to C99 standard, this is undefined behavior. Let's see why:

Section 6.7.8.9 says that

If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate.

This applies to your variable c, because it has automatic storage duration, and it is not initialized explicitly.

Section J.2 says that

The behavior is undefined in the following circumstances:

...

The value of an object with automatic storage duration is used while it is indeterminate

This applies to your code as well, because you read c when you pass it as a parameter to both printf and putchar, and the value of c is still indeterminate, because it has not been assigned.

Upvotes: 4

Related Questions