2016-05-26 5 views
-5
int arrays[100]; 
fseek(fp, 30, SEEK_SET); 
fread(arrays, sizeof(int), 20, fp); 
printf("%i\n", arrays); 
int size = (sizeof(arrays)/ sizeof(int)); 
printf("There are %i numbers.", size); 

//Output: 
//6421876 
//There are 100 numbers 

Очевидно, что массив имеет 7 номеров, поэтому почему он говорит 100?Почему массив правильный, но не счет?

+1

ОТ: 'Е («% г \ п», массивы);' вы не можете напечатать массив, используя целочисленный спецификатор формата, необходимо цикл и печать 'массивы [I]' на каждой итерации –

+0

Спасибо, что дали мне знать! –

+0

'printf ("% i \ n ", массивы);' просто печатает адрес первого элемента массива. Вы должны изучить его, чтобы полностью понять, почему. – SkryptX

ответ

3

Нет, массив имеет 100 элементов. Возможно, вы записали только некоторые из них (20, если ваш fread работал нормально), но это не меняет размер массива.

Это не то, чтобы вылить 250 мл в кувшин 1 л. Размер размера кувшина не магически уменьшает на 75% только потому, что он не заполнен.

В любом случае, то, что вы видите как семь чисел (фактически один номер с семью цифрами) не имеет ничего общего с тем, что было записано в массив. Выражение array в большинстве случаев будет распадаться на адрес первого элемента этого массива. Таким образом, номер, который вы видите, находится там, где находится , не то, что он держит.

2

Массивы в C не являются динамическими. Ваш расчет размера массива основан на его статическом типе. Его статический тип - это, действительно, 100 элементов.

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

0

Вы говорите, что эта линия

printf("%i\n", arrays); 

выходы 6421876 которой утверждают, 7 номеров, но не делать то, что вы думаете. Вы передаете адрес из arrays в функцию printf и сообщают, что это int, но результат ничего полезного.

Ваш расчет размера массива - это общее количество элементов в массиве, а не количество фактически прочитанных элементов. Если вы хотите узнать, сколько целых чисел было прочитано из файла, вы должны посмотреть на возвращаемое значение от fread, которое сообщит вам, сколько элементов были прочитаны из файла. Вы просили 20, но файл, возможно, не содержал столько.

size_t ints_read = fread(arrays, sizeof(int), 20, fp); 
Смежные вопросы