"Error: expression must be a modifiable lvalue" while trying to change char* pointer location

"Error: expression must be a modifiable lvalue" while trying to change char* pointer location

我正在用 C 编写一个小函数来消除前导空格,但它给了我 "expression must be a modifiable lvalue"

char str1[20];
strcpy (str1, otherStr);

for (int i = 0; i < strlen(str1); i++)
{
    if (!isspace(str1[i]))
        str1 = &(str1[i]);
}

我在这里做错了什么? (是的,定义了 otherStr)

您的代码中没有 char * 指针,可能会更改。数组不是指针。您无法 "change" 它的位置。

在 C 语言中,数组对象本身是不可修改的 左值,这就是错误措辞的来源。

char *str1 = malloc(20);
// or
// char s[20];
// char * str1 = s; // note the lack &s
// or
// char *str1 = alloca(20);
strcpy (str1, otherStr);

for (int i = 0; i < strlen(str1); i++)
{
    if (!isspace(str1[i]))
        str1 = &(str1[i]);
}

您的代码不起作用,因为当 char str1[20] 时,str1 不是变量——在大多数情况下,它是一个指针文字,类似于 (void *)0x0342。你不能做 0x0342 = 7; 所以你也不能分配给数组名。