Подтвердить что ты не робот

Поиск длины массива char

У меня есть код следующим образом:

int i=0;
char a[7]={0x00,0xdc,0x01,0x04};
int len=0;
len = sizeof(a);
printf("The Length is : %d", len);

Здесь я хочу найти длину массива a в c? Как это можно сделать?

4b9b3361

Ответ 1

По соглашению C строки имеют "нуль-завершение". Это означает, что в конце есть дополнительный байт со значением нуля (0x00). Любая функция, которая что-то делает со строкой (например, printf), рассмотрит строку, которая закончится, когда найдет нуль. Это также означает, что если ваша строка не заканчивается на нуль, она будет продолжаться, пока не найдет нулевой символ, что может привести к некоторым интересным результатам!

Поскольку первый элемент в вашем массиве равен 0x00, он будет считаться длиной 0 (без символов).

Если вы определили свою строку:

char a[7]={0xdc,0x01,0x04,0x00};

например. нулевой байт

то вы можете использовать strlen для измерения длины строки, хранящейся в массиве.

sizeof измеряет размер типа. Это не то, что вы хотите. Также помните, что строка в массиве может быть меньше размера массива.

Ответ 2

Если вы ожидаете 4 как вывод, попробуйте это:

char a []= {0x00,0xdc, 0x01,0x04};

Ответ 3

sizeof возвращает размер типа переменной в байтах. Поэтому в вашем случае он возвращает размер вашего char[7], который равен 7 * sizeof(char). Так как sizeof(char) = 1, результат равен 7.

Развернув это на другой пример:

int intArr[5];
printf("sizeof(intArr)=%u", sizeof(intArr));

даст 5 * sizeof(int), поэтому вы получите результат "20" (по крайней мере, на обычной 32-битной платформе. В других случаях sizeof(int) может отличаться)

Чтобы вернуться к вашей проблеме:

Похоже, что то, что вы хотите знать, это длина строки, которая содержится внутри вашего массива, а не от общего размера массива.

По определению C-Строки должны быть завершены с конечным "\ 0" (0-байтом). Таким образом, чтобы получить соответствующую длину строки, содержащейся в вашем массиве, у вас есть чтобы сначала завершить строку, чтобы вы могли узнать, когда она закончится. В противном случае теперь можно было бы узнать.

Все стандартные функции основываются на этом определении, поэтому, если вы вызываете strlen для извлечения string len gth, он будет проходить через данный массив до тех пор, пока не найдет первый 0-байтовый, который в вашем случае будет самым первым элементом.

Другое дело, что вам может понадобиться знать, что только потому, что вы не заполняете оставшиеся элементы вашего char[7] значением, они фактически содержат случайные значения undefined.

Надеюсь, что это помогло.

Ответ 4

Вы можете попробовать следующее:

   char tab[7]={'a','b','t','u','a','y','t'};
   printf("%d\n",sizeof(tab)/sizeof(tab[0]));

Ответ 5

Вы можете сделать len = sizeof(a)/sizeof(*a) для любого типа массива. Но вы инициализировали его как a[7] = {...}, то есть его длина равна 7...