表达式必须是可修改的左值

时间:2014-12-13 20:11:08

标签: c recursion

我正在尝试使用递归来使用递归来反转字符串但不使用指针,但它给出了一个错误,说它必须是可修改的值。我该怎么办?

#include<stdio.h>
#include<conio.h>
#include<string.h>

void reverse(char x[30],int start,int end)
{
  char c;
  if(start>=end)
    return;
  c=(x[30]+start);
  (x[30]+start)=(x[30]+end);
  (x[30]+end)=c;
}

int main (void)
{
  char st[30];
  printf("Enter the string ");
  gets(st);
  reverse(st,0,strlen(st)-1);
  puts(st);
  getch();
  return 0;
}

1 个答案:

答案 0 :(得分:2)

所有这些陈述

c=(x[30]+start);
(x[30]+start)=(x[30]+end);
(x[30]+end)=c;

错了。然而,错误发生在最后两个语句中

(x[30]+start)=(x[30]+end);
(x[30]+end)=c;

例如评估表达式

x[30]+end

导致临时整数对象。您不能分配临时对象。

可以通过以下方式定义该功能

void reverse( char s[], size_t start, size_t end )
{
    if ( ( end - start ) > 1 )
    {
        char c = s[start];
        s[start++] = s[--end];
        s[end] = c;

        reverse( s, start, end );
    }
}

并调用

reverse( st, 0, strlen( st ) );