I was confused with usage of %c
and %s
in the following C program
Output is
String adalah sekumpulan karakter. Dalam pemrograman c, untuk variabel yang menampung data sring tidak ada perintah khusus karena dalam bahasa c string adalah sebuah array karakter atau sebuah pointer ke sebuah variabel char yang diakhiri dengan karakter null.
Why we need to use pointer to display a character %c, and pointer is not needed for a string
I am getting error when i use
Error i got is
5 Answers
If you try this:
Output is:
So 'name' is actually a pointer to the array of characters in memory. If you try reading the first four bytes at 0xbff5391b, you will see 's', 'i', 'v' and 'a'
To print a character you need to pass the value of the character to printf. The value can be referenced as name[0] or *name (since for an array name = &name[0]).
To print a string you need to pass a pointer to the string to printf (in this case 'name' or '&name[0]').
is designed for a single character a char, so it print only one element.Passing the char array as a pointer you are passing the address of the first element of the array(that is a single char) and then will be printed :
s
will print
i
and so on ...
Pointer is not needed for the %s because it can work directly with String of characters.
You're confusing the dereference operator * with pointer type annotation *.Basically, in C * means different things in different places:
- In a type, * means a pointer. int is an integer type, int* is a pointer to integer type
- As a prefix operator, * means 'dereference'. name is a pointer, *name is the result of dereferencing it (i.e. getting the value that the pointer points to)
- Of course, as an infix operator, * means 'multiply'.
The name of an array is the address of its first element, so name
is a pointer to memory containing the string 'siva'.
Also you don't need a pointer to display a character; you are just electing to use it directly from the array in this case. You could do this instead:
If you want to display a single character then you can also use name[0]
instead of using pointer.
It will serve your purpose but if you want to display full string using %c
, you can try this: