gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:46:51 24 4
gpt4 key购买 nike

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

最佳答案

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

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

关于c - 如何增加C中数组的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19270472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com