c - 使用指针反转字符串

标签 c string pointers reverse using

我正在尝试使用指针反转字符串。当我尝试打印反转的字符串而不是获取 DCBA 时,我只能以 BA 身份退出?有人可以帮我解决这个问题吗?

#include<stdio.h>
void reverse(char *);
void main()
{
  char str[5] = "ABCD";
  reverse(str);
}

void reverse(char *str)
{
  char *rev_str = str;
  char temp;
  while(*str)
      str++;
  --str;

  while(rev_str < str)
  {
      temp = *rev_str;
      *rev_str = *str;
      *str = temp;   
      rev_str++;      
      str--;
  }
  printf("reversed string is %s",str);
}

最佳答案

你失去了指向字符串开头的指针,所以当你打印它时,你不是从第一个字符开始的,因为 str 不再指向第一个字符。只需放入一个占位符变量以保留指向字符串开头的指针。

void reverse(char *str)
{
  char *begin = str; /* Keeps a pointer to the beginning of str */
  char *rev_str = str;
  char temp;
  while(*str)
      str++;
  --str;

  while(rev_str < str)
  {
      temp = *rev_str;
      *rev_str = *str;
      *str = temp;   
      rev_str++;      
      str--;
  }
  printf("reversed string is %s\n", begin);
}

关于c - 使用指针反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10302524/

相关文章:

c - tolower 用于 C 风格的字符串

c++ - 从 vector 中删除空元素

java - 将数组中的元素连接到字符串

c++ - 运行 Brute Force 算法时出错?

c - 使用基于指针的链表计算多项式和时指针分配中的逻辑错误

c++ - 在 C++ 中是否有可移植的指针关系比较的替代方法?

c - 如何组合 fputs 而不引发错误

c - 中断linux命令重定向会丢失数据吗?

c - 如何在C中使用openssl从私钥中提取公钥

pointers - 防止在测试时更改结构指针值