C program Strings Example how come the result is 98?

81 views Asked by At

C program Strings Example how come the result is 98?

 #include <stdio.h>
int main() 
 {
  char s[]="%d%d%d";
   int a=9,b=8,c=5;
     printf(s+2,a,b,c);
    return 0;
     }
2

There are 2 answers

1
Imobilis On BEST ANSWER

string + x is an operation called Pointer Arithmetic. That way you are providing reference to a mathematically calculated memory area and by semantics it is equivalent to &string[x] What actually happens behind the calculation: (&string + (x * sizeof(*string))) which is why it is a very specific notion when it is applied to pointers. That stands for Arrays as well as they decay to a pointer to the first element after all.


As for your code, you have the following string:

char s[]="%d%d%d";

And is passed as the format string for printf, two bytes afterwards, which explicitly provides reference to "%d%d"


Therefore this:

printf(s+2,a,b,c);

Is later parsed as:

printf("%d%d",a,b,c);

printf will except two integers to read from and the 3rd one will be simply - ignored.

4
Vlad from Moscow On

Expression s+2 speaking in images moves pointer s (in expressions array designators are converted to pointers to their first elements) two positions to the right. So the format string in the printf statement will look like

"%d%d"

because expressiom s+2points to the third character of string "%d%d%d" As result statement

printf(s+2,a,b,c);

will output only two first arguments a and b because the pointed substring contains only two format specifiers and you will get

98

If for example you would use expression s + 4 in the printf call you would get only

9