Fastest way to reverse a string in C

Maybe something like this?

char *str_reverse_in_place(char *str, int len)
{
    char *p1 = str;
    char *p2 = str + len - 1;

    while (p1 < p2) {
        char tmp = *p1;
        *p1++ = *p2;
        *p2-- = tmp;
    }

    return str;
}

You'll find algorithms taking less instructions, like this in place reverse

char* str_reverse_in_place(char *str, int len)
{
    int i;
    for (i = len/2-1 ; i >= 0 ; --i) {
        char c = str[i];
        str[i] = str[len-i-1];
        str[len-i-1] = c;
    }
    return str;
}

Optimizing for speed at that level, look at the inline keyword, also compile with (for gcc) with -O3 (does usually a better job that adding register ... by yourself).

If you need to have the reversed string elsewhere, either provide it in the function (being allocated for strlen(str)+1 - actually len+1 here - characters)

char* str_reverse(char *str, char *reverse, int len)
{
    int i;
    for (i = len-1 ; i >= 0 ; --i) {
        reverse[i] = str[len-i-1];
    }
    reverse[len] = 0;
    return reverse;
}

or malloc it (it will have to be freed by the caller).

char* str_reverse_malloc(char *str, int len)
{
    char *reverse = malloc(len+1);
    if ( ! reverse) return NULL;
    int i;
    for (i = len-1 ; i >= 0 ; --i) {
        reverse[i] = str[len-i-1];
    }
    reverse[len] = 0;
    return reverse;
}

Tags:

C