+ 7

Why there is no output in this code?

#include <stdio.h> int main() { char p[20]; char *s="string"; int length=strlen(s); for (int i=0; i<length;i++){ p[i]=s[length-i]; printf("%s",p); } return 0; }

27th Jan 2019, 6:34 PM
Zhenis Otarbay
Zhenis Otarbay - avatar
1 Answer
+ 6
The C-string "string" length is equal to `strlen("string") + 1` because the null terminator ('\0') is also part of a C-string (strlen() won't count the '\0') which is a signal for end-of-string and as you proceed to the loop body, the null terminator is the first character that is going to be stored in p[0] unless the expression `s[length - i]` become `s[length - i - 1]`, a null terminator gets added to the "one past the last element of the p array", and finally the whole reversed string gets printed. int main() { int i; char p[20]; char *s = "string"; int length = strlen(s); for (i = 0; i < length; i++) { p[i] = s[length - i - 1]; } p[i] = '\0'; printf("%s\n", p); } Output: gnirts
27th Jan 2019, 8:22 PM
Babak
Babak - avatar