2014-02-16 5 views
0

Я пытаюсь вынуть заданный байт из массива char, у которого есть указатель, прикрепленный к нему. см. пример ниже. (Я исключила заголовки и т.д.)указатели и массивы char (сравнение)

unsigned char compareByte(char *str, unsigned char byteNbr, 
    unsigned char lengthOfStr, char char2compare) 
{ 
    //I am stuck here, but this is what I tried to do 
    if (byteNbr > lengthOfStr) 
    { 
    return (unsigned char) 0; 
    } 
    else 
    { 
    if (char2compare == *str + (byteNbr)) 
    { //<- probably where it goes wrong 
     return (unsigned char) 1; 
    } 
    else 
    { 
     return (unsigned char) 0; 
    } 
    } 

} 

int main() 
{ 
    unsigned char result; 
    char string[] = "abcdefg"; 
    unsigned char byte2Compare = 2; //want to take out 'b' from string 
    result = compareByte(string, byte2Compare, strlen(string), 'b'); 
    if (result == 1) 
    { 
    printf("they match! \n"); 
    } 
    else 
    { 
    printf("they don´t match!"); 
    } 
} 

Я всегда получаю, что «Не велят матч», когда я запускаю его, сделать кого-нибудь есть идеи, как сделать его работу, как планировалось?

Я благодарен за любые входы.

+0

Пожалуйста, открепите свой код. – hivert

+2

Несвязанное примечание: 'if (byteNbr> lengthOfStr)' должно быть 'if (byteNbr> = lengthOfStr)', за исключением случаев, когда это нормально сравнивать с завершающим нулем. – Nabla

+1

'return byteNbr <= lengthOfStr && char2compare == str [byteNbr-1];' – BLUEPIXY

ответ

1

Изменить

if(char2compare==*str+(byteNbr)){ 

в

if(char2compare==*(str + byteNbr - 1)){ 

*str+(byteNbr) эквивалентно a + 2 = c

2

Изменить if заявление ниже,

if(char2compare == *(str + byteNbr - 1))

*(str + byteNbr - 1) Это подразумевает, разыменовании (str по базовому адресу + 1 (2 - 1)), что означает значение в адресной строке (str + 1). Здесь 1 означает sizeof(char) байт следующего местоположения.

Примечание: Индексы массивов всегда начинаются с 0. Поэтому, когда вы говорите, что хотите найти байт 2, вы на самом деле имеете в виду массив, индексированный в 1.

Смежные вопросы