2011-05-27 80 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'; 
}