C Ошибка выполнения программы - PullRequest
0 голосов
/ 27 мая 2011

Мой код здесь.Когда я пытаюсь выполнить, я получаю сообщение об ошибке lvalue, требуемое как левый операнд присваивания во 2-й строке Программы ... Может ли кто-нибудь помочь мне?

Ответы [ 5 ]

2 голосов
/ 27 мая 2011

Попробуйте использовать эту строку вместо этого, т.е. не выполняйте присваивание, просто вызов функции:

ASCII2HEX(name,buff);

Ваша процедура уже модифицирует buff, поэтому ее не нужно назначать.

2 голосов
/ 27 мая 2011

Нельзя ставить приведение слева от задания:

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

Ваш код сбивает с толку; с одной стороны, вы передаете в буфер, сигнатура функции передает указатель на буфер, и вы возвращаете 0!

[В дополнение к другим проблемам, вы можете также следить за переполнением буфера ...]

1 голос
/ 27 мая 2011

Сначала ваш буфер недостаточно велик, вы должны использовать 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';
}
0 голосов
/ 27 мая 2011

buff - это тип массива, а не lvalue. В то время как типы массивов будут указывать на указатели в правой части оператора присваивания, в левой части это не так. Таким образом, вы не можете переназначить значение buff, чтобы оно указывало на что-то еще, поскольку оно не затухает для присваиваемого типа указателя.

0 голосов
/ 27 мая 2011

Вы не можете разыграть что-либо в левой части задания, вам нужно сделать:

lvalue = (type) rvalue;

Если вы хотите получить ввод внутри buf, то вы уже делаете это, передавая его вВ качестве аргумента, изменения в баффе, который вы делаете внутри функции, сохраняются после возврата из вызова функции, как вы указали в качестве указателя.Таким образом, вы не назначаете buf снова после возвращения.Кроме того, вы возвратили 0 из функции ascii, и по возвращении присваивается 0 местоположению базового значения массива.так что просто не используйте присвоение в buf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...