【问题标题】:"Error: expression must be a modifiable lvalue" while trying to change char* pointer location尝试更改 char* 指针位置时出现“错误:表达式必须是可修改的左值”
【发布时间】:2015-02-05 19:18:47
【问题描述】:

我正在用 C 编写一个小函数来消除前导空格,但它给了我“表达式必须是可修改的左值”

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

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

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

【问题讨论】:

  • 你不能改变数组的位置,它是编译器在编译时静态分配的。数组确实衰减指向指针,但它们不是指针。如果你想用它作为一个真正的指针,那么你需要使用一个实际的指针。
  • 您的代码中没有 char * 指针。数组不是指针。

标签: c cstring


【解决方案1】:

您的代码中没有char * 指针,它可能会更改。数组不是指针。你不能“改变”它的位置。

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

【讨论】:

  • &amp;(str1[i])char *,我不确定 OP 是否理解。
【解决方案2】:
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;,所以你也不能分配给数组名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2015-03-30
    相关资源
    最近更新 更多