int x = 750;
int i = 0;
while (pow(2, i) < x) {
i++;
}
printf("i is currently %d\n", i);
int array[i];
while (i > 0){
i--;
printf("The value of array %d is %d\n", i, array[i]);
}
Когда я это делаю, это создает действительно сумасшедшие значения. Я слышал о попытках использовать malloc или memset, но значения не изменились. Все, что я хочу сделать, это установить все это на ноль, чтобы я мог использовать его в качестве счетчика. Спасибо!
memset
, которое вы пробовали, выглядело, когда значения не изменились? Опубликуйте это, пожалуйста. Мой хрустальный шар говорит мне, что вы вызвалиmemset(array, 0, i)
, хотя должны были вызватьmemset(array, 0, i*sizeof(*array));
. - person WhozCraig   schedule 05.06.2014memset(array, 1, i*sizeof(*array));
, и он показывает все значения как 16843009. - person Farion   schedule 05.06.2014memset
устанавливает октеты; не объекты. Установка каждого байта в 1 в последовательности 4-байтовых целых чисел дает 0x01010101 для каждогоint
, что в десятичном виде равно 16843009. Если вы хотите, чтобы все они изначально были1
, вы нужно сделать это через жесткий цикл.for (int j=0; j<i; array[j++] = 1);
или что-то подобное. - person WhozCraig   schedule 05.06.2014array[j++]
в прилавок. Большое спасибо, это очень полезно! - person Farion   schedule 05.06.2014while ((1 << i++) < x);
. Версия, которую вы имеете, позволила быi
выйти из цикла как ноль, если бы x был1
. Это было бы плохо, так как привело бы к бесполезному VLA. Я бы также поощрялunsigned int
за все это. - person WhozCraig   schedule 05.06.2014