用指针

时间:2017-02-13 10:35:32

标签: c string

我只是在学习C而我正在尝试编写一个函数来反转char数组(字符串)而不是索引,而是通过指针而不使用malloc

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

char* reverse(char* chararray)
{    
    char *forward = chararray;
    char *reversed = &chararray[strlen(chararray)-1];

    while (reversed > forward) {
        char revTmp = *reversed;
        char fwdTmp = *forward;

        *reversed-- = fwdTmp;
        *forward++ = revTmp;
    }   

    return reversed;
}

int main()
{
    char string[] = "dlrow olleh";
    printf("%s\n",reverse(string));
    return 0;
}

现在的输出是world,应该是hello world - 但它在中间断开,我不知道,为什么。必须有一些我错过的东西。

2 个答案:

答案 0 :(得分:2)

成功反转后,

reversed将指向字符串的中间位置。因此,您将仅打印字符串中该位置的内容(在本例中为“world”)。您也可以通过打印string来验证这一点,并确保它确实已经逆转。

改为返回原始指针chararray

答案 1 :(得分:1)

您正在返回reversed,它指向字符串的中间位置。

您无需返回任何内容,因为您正在反转输入字符串

换句话说,您对输入和输出使用相同的内存块(string)。

只需调用该函数,然后打印该字符串:

reverse(string);
printf("%s\n",string);

除此之外,你也可以改变这个:

char* reverse(char* chararray)
{
    ...
    return reversed;
}

对此:

void reverse(char* chararray)
{
    ...
}