3

我正在尝试创建一个程序,它在给定输入值 n 的情况下输出素数列表。

我制作的 SieveEratosthenes 函数: - 在前 n 个整数上生成素数列表 - 为生成的素数列表创建存储空间 - 返回生成的素数的数量。

这是我的主要功能中的代码:

int main(){
    int n, i;
    int *primes;

    printf("Number that needs to be prime factorized: ");
    scanf("%d", &n);

    int num_primes;

    num_primes = SieveEratosthenes(n, &primes);
    printf("Generated a list of %d primes\n", num_primes);
    printf("\n");

    for (i = 0; i <= sizeof(num_primes) + 1; i++){
        printf("%d", *primes++);
    }
   printf("\n");

   return 0;
}

说 n = 20; 我的输出是:

'生成了一个包含 8 个素数的列表

2 3 5 7 11 13'

当我想要的输出应该是'2 3 5 7 11 13 17 19'

我的筛子功能工作正常,但我无法在我的主要功能中打印出整个素数列表。

任何帮助将非常感激。谢谢!

4

1 回答 1

4

您无法通过计算来确定素数的数量sizeof(num_primes):这是一个编译时常数,它不会随着您输入的值而改变num_primes。看起来您的系统为 a 使用了四个字节int,因此从零迭代到 sizeof+1(含)涵盖索引 0、1、2、3、4 和 5,这与您观察到打印六个数字的结果一致。

如果SieveEratosthenes返回它找到的素数的数量,你的循环应该从零迭代到那个数字,而不是sizeof(num_primes)

for (i = 0; i != num_primes ; i++){
    printf("%d", primes[i]);
}

请注意,我更改*primes++primes[i]. 这是为了帮助您primes在完成后释放,并避免内存泄漏。

于 2014-03-10T21:41:12.873 回答