Julie Thompson
Julie Thompson

Reputation: 13

Reversing a string in C without the output being null

I am trying to reverse a string (character array) using the following code, but when I attempt to print the string, the value of null. This is a homework assignment, but I am trying to learn so any help would be appreciated.

void input_reverse_string(const char* inputStr, char* reverseStr)
{
    int i = 0;
    int length = 0;

    for (; *(inputStr++) != '\0'; i++)
    {
        length++;
    }

        while (*inputStr)
    {
        *reverseStr = *inputStr;
        inputStr++;
        reverseStr++;
    }

    
    const char* chr_ptr = &inputStr[length - 1];
    printf("I see a %s\n", *chr_ptr);


    *reverseStr = '\0';
    
    printf("%d", length);

    /* return reverseStr; */ 
} 

Upvotes: 1

Views: 84

Answers (1)

Marco Bonelli
Marco Bonelli

Reputation: 69367

Several things are out of order:

  1. That's a strange way of computing the length of a string. You are using an index variable that you don't need, and incrementing 3 things at the same time, it's unneeded to say the least.

  2. After calculating the length, and incrementing the inputStr pointer up to its end, you don't reset the pointer, so it still points to the end of the string (actually, one after the end!).

  3. Inside the while you are advancing both pointers (inputStr and reverseStr) in the same direction, which can't possibly be right if you want to reverse the string.

The correct way to do this would be:

  1. Compute the length of the string. Either use strlen() or do it by hand, but you really only need to increment one variable to do this. You can avoid incrementing inputStr, just use a temporary pointer.

  2. Start from inputStr + length and walk backwards. Either use a pointer and do -- or just index the string).

Here's a working example:

void reverse_string(const char* inputStr, char* reverseStr) {
    unsigned len = 0;
    int i;

    while (inputStr[len])
        len++;

    for (i = len - 1; i >= 0; i--) {
        reverseStr[len - i - 1] = inputStr[i];
    }

    reverseStr[len] = '\0';
}

int main(void) {
    char a[6] = "hello";
    char b[6];

    reverse_string(a, b);
    puts(b);

    return 0;
}

Output:

olleh

Upvotes: 2

Related Questions