"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;
所以你也不能分配给数组名。
我正在用 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;
所以你也不能分配给数组名。