C程序执行错误

时间:2011-05-27 04:56:17

标签: c

我的代码在这里。当我试图执行时,我得到一个错误左值作为程序第二行的分配左操作数...任何人都可以帮助我吗?

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;
}

5 个答案:

答案 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的值以指向其他内容,因为它不会衰减为可指定的指针类型。