0
    #include <stdio.h>
    #include <string.h>
    //reversal function

    void reverseString(char* str)
    {
        int l, i;
        char *begin_ptr, *end_ptr, ch;
        l = strlen(str);
        begin_ptr = str;
        end_ptr = str;

        //move  the ptr  to the final pos
        for (i = 0; i < l - 1; i++)
            end_ptr++;
        //pointer swaping
        for (i = 0; i < l / 2; i++)
        {
            ch = *end_ptr;
            *end_ptr = *begin_ptr;
            *begin_ptr = ch;
            begin_ptr++;
            end_ptr--;
        }
    }

    // Driver code

- - - - - - - - - - - - - - - - -主要的 - - - - - - - - -------------------------------------------------- --------------------------------- 函数调用发送数组中第一个字符串的地址

int main()
{
    char *str[ ] = {"To err is human...","But to really mess things up...","One needs to know C!!"};
    for(int i=0;i<3;i++)
    {
    reverseString(str[i]);  //funtion call
    printf("Reverse of the string: %s\n", str[i]);
    }

    return 0;
}
4

1 回答 1

2

您不能修改字符串文字。任何修改字符串文字的尝试都会导致未定义的行为。

来自 C 标准(6.4.5 字符串文字)

7 如果这些数组的元素具有适当的值,则未指定这些数组是否不同。如果程序尝试修改这样的数组,则行为未定义。

你应该声明一个像

enum { N = 32 };
char str[][N] = 
{
    "To err is human...",
    "But to really mess things up...",
    "One needs to know C!!"
};

注意函数 revreseString 太复杂了。当函数返回指向反转字符串的指针时也更好。该函数可以使用指针通过以下方式定义

char * reverseString( char *s )
{
    if ( *s )
    {
        for ( char *p = s, *q = s + strlen( s ); p < --q; ++p )
        {
            char c = *p;
            *p = *q;
            *q = c;
        }
    }

    return s;
}

这是一个演示程序

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

char * reverseString( char *s )
{
    if ( *s )
    {
        for ( char *p = s, *q = s + strlen( s ); p < --q; ++p )
        {
            char c = *p;
            *p = *q;
            *q = c;
        }
    }

    return s;
}

int main(void) 
{
    enum { N = 32 };
    char s[][N] = 
    {
        "To err is human...",
        "But to really mess things up...",
        "One needs to know C!!"
    };

    for ( size_t i = 0; i < sizeof( s ) / sizeof( *s ); i++ )
    {
        puts( reverseString( s[i] ) );
    }

    return 0;
}

程序输出为

...namuh si rre oT
...pu sgniht ssem yllaer ot tuB
!!C wonk ot sdeen enO
于 2020-04-15T17:55:56.677 回答