2013-10-09 38 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],* token; 當我改變數組限制爲任何8個或更多的數字數字,如11111111,6829786907(等等),然後程序得到遵守,但在輸出時顯示'Segmention Error'。我如何增加數組限制?我正在使用基於UNIX的系統。請幫我:)如何增加C中數組的限制?

+0

嗯。再次!!我認爲你的編譯器有問題。 – haccks

+0

我沒有得到答案,大聲笑 – 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又名0x00000000。

+0

我試過char * buf = malloc(9999999999); 它工作!但添加更多的數字,如999999999999999999999(好吧那太可笑了!)然後它給出這個錯誤:: 整數常量溢出 – user2583127

+0

我用char數據類型。我應該使用什麼?另外,是否可以定義無限大小的數組? – user2583127

+1

這是一個絕對沒有感覺。閱讀有關編程的書籍 –