是否可以编写一个可以在不使用缓冲区字符串的情况下反转字符串的函数?

Nis*_*ant 0 c

可能重复:
如何使用指针反转c中的字符串?

面试问题是编写一个函数,调用revstr该函数可以获取字符串并反转它而不使用缓冲区字符串,即涉及指针.我该怎么做呢?

Eri*_*rik 8

从开始和结束迭代,交换字符.

void revstr(char * str) {
  int right = strlen(str) - 1;
  int left = 0;
  while (left < right) {
    char c = str[right];
    str[right] = str[left];
    str[left] = c;
    ++left;
    --right;
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以选择使用xor技巧进行交换而不使用中间字符:

str[right] ^= str[left];
str[left] ^= str[right];
str[right] ^= str[left];
Run Code Online (Sandbox Code Playgroud)

这是一种纯粹无意义的交换方式 - 使用这种结构的唯一原因是一个人为的要求,即你不能将字符串数据存储在中间变量中,也不能调用外部函数.