我想为一个以null结尾的char*字符串实现一个反向函数(以null结尾的字符串,这是多余的?)并提出了以下解决方案.
swap(&tmp, &str)反向函数中的最终交换没有任何影响.是什么原因,怎么可能呢?
备注:我已经重新实现了反向函数,只使用字符串本身,临时字符和索引,但我很感兴趣为什么这不起作用.在这个指针问题上我没有考虑过什么?
#include <stdlib.h>
#include <stdio.h>
int strlen(char* str)
{
int len = 0;
char* ptr = str;
while (ptr[0] != '\0')
{
len++;
ptr++;
}
return len;
}
void swap(char **a, char **b)
{
char* c = *a;
*a = *b;
*b = c;
}
void reverse(char* str)
{
int len = strlen(str);
char* tmp = malloc(sizeof(char) * (len + 1));
int i;
for (i = 0; i < len; i++)
{
tmp[i] = str[len - 1 - i];
}
tmp[len] = '\0';
// printf(tmp); => "wolfrevOkcatS olleH"
swap(&tmp, &str);
}
int main(int argc, char** argv)
{
char* str = "Hello Stackoverflow\0";
reverse(str);
printf("%s", str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你可以只做一个反向的,你不需要你正在做的指针交换:
void reverse(char* str, int len)
{
int i;
for (i = 0; i < len; i++)
{
char tmp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = tmp;
}
}
Run Code Online (Sandbox Code Playgroud)
要回答你的问题,你需要传递char**给你的reverse函数,因为你正在改变它指向的东西,并且指针是按值复制的,所以如果你想反映指针的变化,你需要一个双指针.