Member 11735960 Ответов: 3

Будет ли strlen() работать для массива int?


#include<stdio.h>
void main()
{ 
  int b[100];
  int a=10;
  do
  {
    b[i]=a%2;
    c=a/2;
    a=c;
  } while(a>=2)

  len=strlen(b);
  printf("%d",b[i]);
  getch();
}

Лен не работает должным образом. Когда переменная 'a' инициализируется большим числом, выход для len равен 4. Когда b[100] задается вместо b[i] в printf(), ответ равен 6. Как я могу правильно получить длину массива для любого значения переменной 'a'? Пожалуйста, помогите мне. Спасибо.

Kornfeld Eliyahu Peter

Длина массива b равна 100!
Я также с трудом верю, что этот код никуда не денется (нет, я определил)...
Что касается strlen - он проверяет количество символов (байтов) от переданного указателя до первого нулевого символа (байта), поэтому он не будет корректно работать для массива int (так как размер int не совпадает с размером байта)...

Frankie-C

Я думаю, что мы не поняли, о чем вы просите.
Они уже объяснили вам, что функция 'strlen()' не работает для того, что вы делаете. Его имя-сокращение для 'string+length', и его область действия-найти длину строки символов, а не сколько значений вы поместили в общий массив.
Когда вы объявляете массив, он создается с тем количеством элементов, которое вы запросили в объявлении, в вашем случае 100 целых чисел.
Ваш код не работает:
1. Где определяется переменная i ?
2. В do-while цикл можно записать результат всегда б[я] (и я не определена).
3. В C массивы основаны на нуле, что означает, что они начинаются с 0. Для массива из 100 элементов правильные индексы находятся в диапазоне 0-99 включительно. b[100] - это ошибка!
4. От того, что мы видим (пункты 1,2 &ампер; 3) б[100] никогда не получить любое значение
Пожалуйста, улучшите свой вопрос и свой код, если вы хотите получить ответ.

3 Ответов

Рейтинг:
2

Frankie-C

Ответ - нет.
strlen () - это строковая функция, и вы не можете использовать ее ни для чего другого. ;)


Рейтинг:
0

User 59241

Документация всегда является первым пунктом вызова. strlen () - это для строк все, что вам нужно знать. http://www.cplusplus.com/reference/cstring/strlen/[^]

Способ получения количества членов (в отличие от количества байтов) вашего массива заключается в следующем:

int b[100];
int len=sizeof(b)/sizeof(b[0]);


http://www.c4learn.com/c-programming/sizeof-operator/[^]


Рейтинг:
0

OriginalGriff

strlen не будет работать слишком хорошо для целых чисел, просто из-за способа хранения целых чисел.
Предполагая 32-битные ints, они берут четыре байта (16 - битные целые числа будут использовать 2 байта), а для ПК с Windows они хранятся в формате little endian-наименее значимый байт целочисленного значения будет занимать самый низкий адрес.
strlen прекращает подсчет размера строки, когда она достигает байта, содержащего "\0 " - поэтому, если ваше первое целочисленное значение меньше 256, оно остановится, когда обнаружит второй байт, и вернет длину 1.
Чем больше число, тем дольше будет идти отсчет: если у вас есть 16-битные целые числа, и Ваш массив содержит 256, 255, 1777, то третий байт, на который он смотрит, будет равен нулю, и он будет считать, что это конец строки.

Вам придется выполнить поиск вручную, если только решение pwasser не является тем, что вы ищете.