-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; 配列の制限を11111111、6829786907などの8桁以上の数字に変更すると、プログラムはコンパイルされますが、出力では「セグメントエラー」が表示されます。配列の制限を増やすにはどうすればよいですか? UNIX ベースのシステムを使用しています。私を助けてください :)

4

1 に答える 1

1

できません。6829786907 配列を要求すると、6829786907 バイトが必要になります。これはほぼ 7Go のラムです。単純に 7Gio を一度に割り当てるわけではありません。さらに、巨大なバッファを持つという目標は何ですか?

編集: を書くときchar buf[256];、サイズ 256 * sizeof(char) = 256 の連続したメモリ チャンクを OS に要求しますchar buf[6829786907];。かたまり。printf("buf adress: %p", buf);0x00000000 をリントする でこれを確認できます。これは、あなたのためのスペースがないことを意味します。次に、(fgets()呼び出しで) ポインターを使用すると、セグメンテーション違反が発生します。所有していないメモリ アドレスを読み書きしようとすると、セグ フォールトが発生します。ここではbuf別名 0x00000000 です。

于 2013-10-09T11:16:32.900 に答える