Alex Rivera | Logout

Printing a char with printf

Asked 2011-01-19T14:58:44.943
35

Are both these codes the same

char ch = 'a';
printf("%d", ch);

Will it print a garbage value?

I am confused about this

printf("%d", '\0'); 

Will this print 0 or garbage value? Because when i do this

printf("%d", sizeof('\n')); 

It prints 4. Why is sizeof('\n') 4 bytes? The same thing in C++ prints 1 bytes. Why is that?

So here's the main question

in c language is printf("%d", '\0') supposed to print 0

and in C++ printf("%d", '\0') supposed to print garbage?

Edit
Report

2 Answers

59

%d prints an integer: it will print the ascii representation of your character. What you need is %c:

printf("%c", ch);

printf("%d", '\0'); prints the ascii representation of '\0', which is 0 (by escaping 0 you tell the compiler to use the ascii value 0.

printf("%d", sizeof('\n')); prints 4 because a character literal is an int, in C, and not a char.

answered 2011-01-19T15:00:51.837
7

In C, character constant expressions such as '\n' or 'a' have type int (thus sizeof '\n' == sizeof (int)), whereas in C++ they have type char.

The statement printf("%d", '\0'); should simply print 0; the type of the expression '\0' is int, and its value is 0.

The statement printf("%d", ch); should print the integer encoding for the value in ch (for ASCII, 'a' == 97).

answered 2011-01-19T15:23:25.260

Your Answer