// 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 donen");
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 行: 夏亚布夫[256], *令牌;当我将数组限制更改为任何 8 位或更多数字(如 11111111、6829786907(等等((时,程序会得到遵守,但在输出时它显示"分段错误"。如何提高阵列限制?我使用的是基于 UNIX 的系统。请帮我:)
你不能。如果要求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。