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