反向字符串操作

时间:2012-03-31 16:27:36

标签: c

以下代码给出了以下错误:

  从char类型*分配类型'char [10]'时

不兼容的类型   lvalue需要作为递减操作数。

可能导致这种情况的原因是什么?

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

int main(void)
{
    char *str1="1234";
    char str2[10];

    str2 = str2 + strlen(str1)-1;          //the str pointer is at 3rd position
    char *p = str2+1;                      //since it has to be a valid string, i assigned pointer p to give the null value at the end of the string.
    *p = '\0';

    while(*(str2--) = *(str1++))            //moving the pointer of str down and pointer of str1 up and copy char from str1 to str2

    printf("%s", str2);

    return 0;
}

1 个答案:

答案 0 :(得分:3)

str2是一个数组,而不是一个指针,因此左侧str2 = ...不是一个有意义的C表达式。

要么str2必须是指针,要么使用额外的变量(如p)来获取表达式

char *p = str2 + strlen(str1);

同样(str2--)没有意义。使用指向str2的额外字符指针,并更改它。

将数组名称视为常量指针。它无法更改,但可以在表达式中=的右侧使用。