我的代码在这里。当我试图执行时,我得到一个错误左值作为程序第二行的分配左操作数...任何人都可以帮助我吗?
void main()
{
unsigned char name[10]="ERPDIR",buff[30];
(char *)buff = ASCII2HEX(name,buff);
printf("The HEX Value is %s\n", buff);
}
char *ASCII2HEX(unsigned char *Response,unsigned char *buff)
{
int len,hexlen=0,i=0;
unsigned char BUFF[512]="";
#ifdef PRINT_CONSOLE
printf("\n###### ASCII2HEX:");
#endif
len = strlen((char*)Response);
for(i=0;i<len;i++)
{
sprintf((char*)BUFF+(2*i),"%02X",Response[i]);
#ifdef PRINT_CONSOLE
printf("%02X ",Response[i]);
#endif
}
printf("\n");
BUFF[2*i]='\0';
hexlen=len;
memset(buff,0,sizeof(buff));
AsciiStr2HexByte((const char*)BUFF,len*2,buff,&hexlen);
buff[hexlen]='\0';
return 0;
}
答案 0 :(得分:2)
你不能在作业的左侧放置一个演员:
(char *)buff = ASCII2HEX(name,buff);
^^^^^^^^
你的代码令人困惑;一方面你传入一个缓冲区,函数签名传递一个指向缓冲区的指针,你返回0!
[除了其他问题,您可能还需要注意缓冲区溢出...]
答案 1 :(得分:2)
请尝试使用此行,即不要执行赋值,只需要调用函数:
ASCII2HEX(name,buff);
您的例程已在修改buff
,因此无需分配。
答案 2 :(得分:1)
首先你的缓冲区不够大你应该使用buff [40](10 * 4) 你不必在这里做任务ASCII2HEX总是返回0
ASCII2HEX(name,buff);
我已将ASCII2HEX的返回类型更改为void,您不需要返回值
void ASCII2HEX(unsigned char *Response,unsigned char *buff);
void main()
{
unsigned char name[10]="ERPDIR",buff[30];
ASCII2HEX(name,buff);
printf("The HEX Value is %s\n", buff);
}
void ASCII2HEX(unsigned char *Response,unsigned char *buff)
{
int len,hexlen=0,i=0;
unsigned char BUFF[512]="";
#ifdef PRINT_CONSOLE
printf("\n###### ASCII2HEX:");
#endif
len = strlen((char*)Response);
for(i=0;i<len;i++)
{
sprintf((char*)BUFF+(2*i),"%02X",Response[i]);
#ifdef PRINT_CONSOLE
printf("%02X ",Response[i]);
#endif
}
printf("\n");
BUFF[2*i]='\0';
hexlen=len;
memset(buff,0,sizeof(buff));
AsciiStr2HexByte((const char*)BUFF,len*2,buff,&hexlen);
buff[hexlen]='\0';
}
答案 3 :(得分:0)
你不能在作业的左侧施放某些东西,你需要这样做:
lvalue = (type) rvalue;
如果你想在buf
内得到输入,那么你已经通过在参数中传递它来做到这一点,函数调用返回后你在函数内执行的buff中的更改仍然存在,就像你传入的那样作为指针。因此,您在重新调整时不会再次指定buf
。此外,您已从ascii函数返回0
,并且在返回时,将0
分配给数组基值位置。所以根本不要将作业用于buf
。
答案 4 :(得分:0)
buff
是数组类型,而不是左值。虽然数组类型会在赋值运算符的右侧衰减为指针,但左侧也不是这样。因此,您无法重新指定buff
的值以指向其他内容,因为它不会衰减为可指定的指针类型。