【问题标题】:'Lvalue required as increment operand' error in CC中的“需要左值作为增量操作数”错误
【发布时间】:2020-10-06 05:34:47
【问题描述】:

这是我的代码 sn-p:

void readandprint(){
    int* num = (int*) malloc (10* sizeof(int));
    for (int i =0;i<10;i++){
        *(num+i) = 0;
    }
    char c;
    while (scanf("%c",&c)==1){
        if (c>='0'&&c<='9'){
            *(num+c-'0')++ ; //error here
        }
    }
    for(int j = 0;j < 10;j++){
        printf("%d ",*(num+j));
    }
}

然后我得到了“需要作为增量操作数的左值”错误。当我用“+=1”替换“++”时,代码工作得很好。谁能告诉我为什么?非常感谢您的任何建议。

【问题讨论】:

  • 试试(*(num+c-'0'))++;num[c-'0']++;。 (您的问题与运算符优先级有关。)
  • @IanAbbott:特别是,我认为您的第二个建议更具可读性。
  • OT: about: int* num = (int*) malloc (10* sizeof(int)); 1) 在c中,返回类型为void*,可以赋值给任意指针。强制转换只会使代码混乱并且容易出错。建议去掉演员表。 2) 始终检查 (!=NULL) 返回值以确保操作成功。如果不成功 (==NULL) 则调用 perror( "your error message"); 将您的错误消息和发生错误的文本原因输出到 stderr
  • OT:关于:if (c&gt;='0'&amp;&amp;c&lt;='9'){ 更好、更清晰,并且可以处理非连续数字:#include &lt;ctype.h&gt;if( isdigit( c ) )

标签: c


【解决方案1】:

here所写 增量运算符的优先级高于间接运算符。 因此,您的表达式被评估为 *((num+c-'0')++),其中子表达式 (num+c-'0') 不是lvalue,不能出现在增量运算符的左侧。

【讨论】:

    【解决方案2】:

    如果你想增加引用的 int 那么你需要:

     (*(num+c-'0'))++
    

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2021-05-11
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2012-10-01
      相关资源
      最近更新 更多