-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(等等),然后程序会被编译,但在输出时会显示“分段错误”。如何增加数组限制?我正在使用基于 UNIX 的系统。请帮我 :)

4

1 回答 1

1

你不能。如果你要求一个 6829786907 数组,它需要 6829786907 字节。这几乎是 7Go 的 ram。一个人不会一次简单地分配 7Gio。此外,拥有巨大缓冲区的目标是什么?

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

于 2013-10-09T11:16:32.900 回答