Search code examples
cstringreverseswapreversing

Reversing the string without library function


The code got compiled successfully. but I can't reverse the string. since I am a beginner-level programmer, I can't really figure out the mistake I made.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {      
    int temp, i, j, length;
    char name[20], name1[20];

    printf(" Enter string \n");
    scanf("%s", name);
    length = strlen(name);
    printf(" %d", length);
    for (i = length - 1; i >= 0; i--) {
        name1[length - i] = name[i];
    }
    printf("%S ", name1);
    
    return 0;
}

Solution

  • Here are some issues in your code:

    • you should limit the number of characters stored into name with %19s.

    • name1[length - i] = name[i]; does not use the correct offset. Try the first iteration: i is length-1 you copy the last character to position length - (length - 1) hence position 1 instead of 0. Use this instead:

        name1[length - i - 1] = name[i];
      
    • you must set a null terminator at the end of the reversed string:

        name1[length] = '\0';
      
    • in the printf() call, %S is incorrect. Use %s instead and append a newline.

    Here is a modified version:

    #include <stdio.h>
    
    int main() {      
        char name[20], name1[20];
        int i, length;
    
        printf(" Enter string:\n");
        if (scanf("%19s", name) == 1) {
            length = strlen(name);
            printf("%d\n", length);
            for (i = 0; i < length; i++) {
                name1[length - i - 1] = name[i];
            }
            name1[length] = '\0';
            printf("%s\n", name1);
        }
        return 0;
    }