2011-05-27 79 views
-1

我的代码在这里。当我试图执行时,我得到一个错误的左值,作为程序第二行赋值的左操作数......任何人都可以帮我吗?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; 
} 
+1

什么代码做的到底是什么,它返回0?并且你正在试图将类型转换为char *类型的'char'数组中? – phoxis 2011-05-27 05:01:47

回答

2

你不能把一个投在赋值的左侧:

(char *)buff = ASCII2HEX(name,buff); 
^^^^^^^^ 

你的代码是混乱的;一方面你传入一个缓冲区,函数签名传出一个指向缓冲区的指针,并且你返回0!

[除了其他问题,你可能还需要提防缓冲区溢出...]

+0

如果我没有在赋值的左侧进行转换,那么在从类型char *“...... – Nikki 2011-05-27 05:02:53

+1

分配类型'unsigned char [30]'时会出现以下错误:”不兼容的类型,因为类型为in左侧是'char []',你试着去做'char *' – phoxis 2011-05-27 05:06:25

2

尝试使用这条线来代替,即不做的任务,只是一个函数调用:

ASCII2HEX(name,buff); 

你的程序已经在修改buff,所以不需要分配。

+1

+1其他答案发现问题。这是解决方案。 ASCII2HEX将其结果放入第二个参数中,而不是函数返回值。 – 2011-05-27 05:13:51

0

不能使人对分配的左侧的东西,你需要做的:

lvalue = (type) rvalue; 

如果你想通过它传递的参数进去buf那么你已经完成它的输入,在函数调用返回之后,在函数内部进行的修改仍然存在,就像您已经作为指针传入一样。所以你在重新回归时不会再分配buf。另外,您已经从ascii函数返回0,并且它发生的情况是在返回时将0分配给数组基地址位置。所以根本不要将这个任务用于buf

0

buff是一个数组类型,而不是左值。虽然数组类型会衰减到赋值运算符右侧的指针,但左侧的情况并非如此。所以你不能重新指定buff的值来指向别的东西,因为它不衰减为可指定的指针类型。

1

首先你的缓冲区不够你,你应该使用的buff [40](10 * 4) 你不必在这里做任务大ASCII2HEX总是返回0

ASCII2HEX(name,buff); 

我已经改变了回报ASCII2HEX类型无效,你不需要返回值

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