char a[10];
scanf("%s",a);
int i=0;
while(a[i]!='\0')
printf("\n%c",a[i++]); //similar to printf("%s",a);
char *b;
b=malloc(10*sizeof(char));
scanf("%s",b);
i=0;
while((b+i)!='\0')
printf("\n%c",*(b+i++)); //not similar to printf("%s",a);
For input “abcd”, the first loop prints a[] is it would be with printf(). But the same is not true for *b.
Second loops continues for too many until it encounters a ‘\0’.
So, does this mean ‘\0’ is appended at the end of character strings automatically but not at the end of char type pointers?
And whose job is it to append this ‘\0’? Compiler’s?
You forgot to dereference the pointer you get with
b+i. It should be:b + ijust gets you an address, you have to dereference it to actually look at what the memory is pointing at and see if it’s the NUL-terminator. Thex[y]notation is equivalent to*(x + y).Also don’t forget to
freethe memory you allocated withmalloc.