2015-04-16 1 views
2

Я пытаюсь определить длину массива msg по приведенному ниже коду, я использовал strlen и sizeof, но они не возвращаются. 6. Какую функцию я могу использовать для определения длины массива uint8_t или как я могу изменить приведенный ниже код (osal_DataLenght() fcn)?Как определить длину массива uint8_t?

int osal_DataLength(char *pString){ 
    return (int)(strlen(pString)); 
} 

void setNewLevel(uint8_t newLevel){ //GW specific 
    uint8_t msg[8] = {'\0'}; 
    msg[0] = '0'; 
    msg[1] = '7'; 
    msg[6]= newLevel; 
    //msg[7] = '0'; 
    printf("the array length:%d\n", osal_DataLength(msg)); 
} 

int main(void){ 
    setNewLevel(0xD5); 
    return 0; 
} 
+0

Мне не нужен msg [7], если я должен использовать его для поиска длины, то я могу раскомментировать его – sven

+0

Длина 'msg' * is * 8, независимо от того, инициализируете ли вы все элементы или не. –

ответ

3

Чтобы узнать размер вашего массива, написать (в setNewLevel() как сказал @Dabo):

sizeof(msg)/sizeof(uint8_t); 

strlen() возвращает размер строки (массив символов заканчивается NULL, т.е. '\0'). Вы не можете использовать его в этом контексте, так как:

  1. msg[2] до msg[5] значения не инициализируются
  2. msg не char последовательность завершается NULL.
+0

Я хочу узнать длину массива, а не размер массива – sven

+1

Нет такой вещи в C. – Siguza

+0

@sven: что вы имеете в виду? Это отношение дает длину вашего массива (например, '.length' в Javascript). – Amessihel

1

При передаче массива в функцию она распадается на указатель, и нет никакого способа, в функции знать длину исходного массива. Пропустите длину в качестве дополнительной переменной

int osal_DataLength(char *pString, int size) 
. 
. 
. 
printf("the array length:%d\n", osal_DataLength(msg, sizeof(msg))); 
1
strlen(const char *str) 

функция STRLEN ищет '\ 0', чтобы закончить и показать длину массива. Итак, вы делаете все массивные данные сначала «\ 0», а затем в своей функции setNewLevel msg [0] = 0 и msg [1] = 7, а затем msg [6] = newLevel, а другие - «\ 0», поэтому вы всегда видите длина равна 2.

+0

Нужно ли произвольным значениям присваивания для 2-го, 3-го, 4-го и 5-го элементов массива, чтобы определить длину массива 7 на указанном выше коде? – sven

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