void* 类型转换为 char* 的增量失败

increment of void* type-casted as char* fails

在这样的函数中:

char nextchr (void* p)
{
    ((char*)p)++;

    return *(((char*)p));
}

应该 return 作为参数传递的字符串文字的第二个字符 p 根本无法做到这一点。

为什么会这样?


解决方案总结:

@M.M : ++ 需要一个左值(左手值)才能应用,而类型转换的结果不是那个。

@OP 更新: 一些编译器(通常是 /old C89/ /compilers/ 像我的)可能允许 ((char*)source)++; /只要它不作为参数传递给函数/即使它是非法的并被 C 标准证明是非法的。

++ 需要一个左值。您的代码可以是:

char *c = p;
++c;
return *c;

虽然这样写会简单很多return ((char *)p)[1];