Question: In my knowledge the `%c` expects the int value (as `char` is treated as integer in **C**), and `%s` expects the `char *` as argument, but my doubt is, **does the %s need a pointer to a block of characters? Can it points to a single character in double quotes?** 

For example:

```
char * s = "string"; 
printf("%s",s);// output: string 

```

How is the compiler able to figure out the block of memory where the string is present and terminated by `'\0'`?.

Answer: 
> 
> how compiler is able to figure out the block of memory where the
>  string present and terminated by '\0' ?.
> 
> 
> 

Because a string literal (x amount of characters between double quotes) gets the NUL terminator `\0` added to it by the compiler.

```
char * s = "string"; 
char foo = s[6]; // \0

```

So `printf` just prints the characters of the string until it finds a `\0`.

> 
> is the %s needs pointer to a block of character . can it points to a
>  single character in double quote ?
> 
> 
> 

Yes you can, a single character in double quotes is still a string literal with a `\0` at the end.
The string is made up of character, just as the char array is made up if characters. 

Compilers should be smart, and gcc must have a function that can identify which is which, and peform the appropriate operations (such as adding a null terminator)

And to answer your question, yes it will still print to the console, just as 

```
char * s = "string"; 
printf("%s",s);// output: string 

```

Will print to the console.