如何修复C字符串反函数bug?

时间:2014-10-25 16:28:38

标签: c

我正在尝试编写一个可以反转字符串内容的函数。但是当我运行程序时,它无法正常工作...... 所以我的问题是: 有人能告诉我这段代码有什么问题吗?

#include <stdio.h>
#include <string.h>
#define ARR "It's a perfect day\n"

char * string_in(char *, int);
int main(void)
{
    char * ptr = ARR, ans;
    size_t size = strlen(ARR);
    printf("%d\n", size);
    do
    {
        puts(ptr);
        ans = string_in(ARR, size);
        puts(ptr);
    }while(getchar() == '\n');

    return 0;
}

char * string_in(char * tar, int n)
{
    char temp;
    int index = n - 1;

    for(int i = 0; i < n; i++)
    {
        temp = *(tar+i);
        tar[i] = tar[index];
        tar[index] = temp;
        index--;
    }

    return tar;
}

3 个答案:

答案 0 :(得分:4)

你的第二个循环应该只到(n / 2)

for(int i = 0; i < (n/2); i++)

答案 1 :(得分:2)

您必须因此而遇到分段错误:

#define ARR "It's a perfect day\n"

当你在下面做的时候:

char * ptr = ARR;

这将被编译器替换为:

char * ptr = "It's a perfect day\n";

以上sting是不可变的,你无法修改。因此,分段错误。

是的,请更正您的反向字符串功能。并将ARR声明为char ARR[length],并在数组中使用length所需数量的字符。

答案 2 :(得分:0)

按以下方式编写功能

char * reverse( char * s, size_t n )
{
    for( size_t i = 0; i < n / 2; i++ )
    {
        char tmp = s[i];
        s[i] = s[n - i - 1];
        s[n - i - 1] = tmp;
    }

    return s;
}

至于你的功能,当i&lt; n / 2,然后第二次将其反转到原始状态。