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];
在这样的函数中:
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];