我只是在学习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
- 但它在中间断开,我不知道,为什么。必须有一些我错过的东西。
答案 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)
{
...
}