gpt4 book ai didi

c - 为什么这个指针交换在字符串反转中会失败?

转载 作者:太空宇宙 更新时间:2023-11-04 01:11:04 24 4
gpt4 key购买 nike

我想为空终止的 char* 字符串(空终止的 char 字符串,这是多余的吗?)实现一个反向函数,并提出了以下解决方案。

reverse 函数中最后的swap 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;
}

最佳答案

你可以只做一个原地反转,你不需要你正在做的指针交换:

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;
}
}

要回答您的问题,您需要将 char** 传递给您的 reverse 函数,因为您要更改它将指向的内容,并且会复制指针按值,所以如果你想反射(reflect)pointee的变化你需要一个双指针。

关于c - 为什么这个指针交换在字符串反转中会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12511952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com