2013-10-09 2 views
-7
// C Program to find average of numbers given by user 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
void main() 
{ 
    double sum = 0; 
    int ii = 0, c; 
    char buf[256], *token; 

    printf 
     ("Enter the numbers to average on a single line, separated by space and press enter when done\n"); 
    fgets(buf, 255, stdin); 
    token = strtok(buf, " "); 
    while (token != NULL) 
    { 
     sum += atof(token); 
     ii++; 
     token = strtok(NULL, " "); 
    } 
    printf("Average is %lf", sum/(double)ii); 
} 

В строке 8: char buf [256], * токен; , когда я изменяю предел массива на любые 8 или более цифр цифр, таких как 11111111, 6829786907 (и т. Д.), Тогда программа выполняется, но на выводе отображается «Ошибка сегментации». Как увеличить лимит массива? Я использую систему на базе UNIX. Пожалуйста, помогите мне :)Как увеличить предел массива в C?

+0

Хммммм. Еще раз!! Я думаю, что что-то не так с вашим компилятором. – haccks

+0

i didnt получить ответы на это lol – user2583127

+0

@haccks вы можете попробовать размер массива 99999999 на компиляторе ура? – user2583127

ответ

1

Вы не можете. Если вы запрашиваете массив 6829786907, для этого требуется 6829786907 байт. который почти 7Go барана. Один из них не просто выделяет 7Gio сразу. Кроме того, какова цель иметь гигантский буфер?

редактировать: когда вы пишете char buf[256];, вы спросите ОС, чтобы дать вам непрерывный участок памяти размером 256 * SizeOf (Char) = 256. Если вы пишете char buf[6829786907];, спросите вы 7Go, который огромен, и ОС просто не отдавайте этот кусок памяти. Вы можете проверить это с помощью printf("buf adress: %p", buf);, который будет, я уверен, 0x00000000. Это означает, что у вас нет места для вас. Затем, когда вы используете указатель (в вызове fgets()), возникает ошибка сегментации. Ошибка Seg возникает, когда вы пытаетесь прочитать и/или написать адрес памяти, который у вас нет. Здесь buf aka 0x00000000.

+0

Я попробовал char * buf = malloc (9999999999); и это сработало! Но добавив больше чисел, таких как 999999999999999999999 (нормально, это смешно!), Тогда он дает эту ошибку :: целочисленное постоянное переполнение – user2583127

+0

Я использовал тип данных char. что я должен использовать? также, можно ли определить бесконечный размер массива?! – user2583127

+1

Это абсолютный не-чувственный. Читайте книги о программировании –

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