如何在C中增加数组的限制?

时间:2013-10-09 11:12:49

标签: c arrays char bounds

// 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的系统。请帮帮我:)。

1 个答案:

答案 0 :(得分:1)

你做不到。如果要求6829786907阵列,则需要6829786907字节。几乎是7Go的ram。一个人不是简单地一次分配7Gio。 此外,拥有巨型缓冲区的目标是什么?

编辑:当你写char buf[256];时,你要求你的操作系统给你一个大小为256 * sizeof(char)= 256的连续内存块。如果你写char buf[6829786907];,你会问7Go,是巨大的,你的操作系统只是不给这个内存块。您可以使用printf("buf adress: %p", buf);来验证这一点,我将打赌,这将是0x00000000。这意味着您没有任何空间。然后,当您使用指针(在fgets()调用中)时,会发生分段错误。当您尝试读取和/或写入您不拥有的内存地址时会发生Seg故障。这里buf又名0x00000000。