1

首先,对不起我的英语,我是法国人。我想写一个函数,my_revstr. 这个函数反转一个字符串,但是当我测试它不起作用时,它会启动控制台并崩溃。

要反转我的字符串,我想交换相反的字符,例如:换成8 chars 0-7, 1-6, 2-5, 3-4. 我使用了一些功能:my_strlen (return the lenght of the string),,my_swap (swap the values)这个功能有效。这是代码:

char *my_revstr(char *str)
{
int i;
int n;

i = my_strlen(str);
if (i%2 == 1) /* odd str*/
{
    i = i/2 - 1;
    n = i + 2;
    while (i >= 0)
    {
        my_swap(str + i, str + n);
        i = i - 1;
        n = n + 1;
    }
}
else
{
    i = i / 2 - 1;
    n = i + 1;
    while (i >= 0)
    {
        my_swap(str + i, str + n);
        i = i - 1;
        n = n + 1;
    }
}
}

这是测试:

int main()
{
my_putstr(my_revstr("Bonjour"));
return 0;
}

你能帮我理解为什么它不起作用吗?

4

1 回答 1

3

使用字符串文字(例如"Bonjour")定义的字符串将被视为只读。

修改这样的字符串会调用未定义的行为。

第一步是使其可修改:

char text[] = "Bonjour";

my_putstr(my_revstr(text));

这将创建一个字符数组 ( text),并仅使用字符串文字来初始化该数组。这意味着在第一行之后,text只是一个字符数组,您可以像使用任何其他变量一样对其进行读/写访问。

此外,您的函数缺少一条return语句,因此传递给的指针my_putstr()也是非常随机的。这又是未定义的行为。

于 2013-05-28T12:33:29.743 回答