c - 单个 printf 语句如何更改数组中的值?

标签 c printf

以下程序打印 1 到 10 之间的质数。

#include <stdio.h>
int* prime(int x,int y,int* range);

void main()
{
    int *x,s=10;
    int i=0; 
    x=prime(1,10,&s);

    for(i=0;i<s;i++)
    {
        printf("%d\n",x[i]);
    }


}
int* prime(int x,int y,int *range){

    int num[100],i,j,flag,inc=0;

    for(i=x;i<=y;i++)
    {
        flag=1;
        for(j=2;j<=(i/2);j++)
        {
            if(i%j == 0)
                flag=-1;
        } 
        if(flag==1)
        {

            num[inc]=i;
            inc++;
        }

    }
    *range=inc;
    //printf("$$%d$$",*range);
    return num;
}

输出是 1 2 3 5 0 在上面的例子中,但是如果我们删除 prime 函数中 printf 语句中的注释并给出正常的 printf 语句,输出是 1 2 3 5 7 这怎么可能??这里有什么错误??

我使用的编译器是linux平台下的GCC编译器。

最佳答案

您的 prime() 方法返回位于堆栈中的局部变量 num,因此它不在 prime() 之后的范围内(也称为无效) 调用返回。

几个修复:

  • 您可以在 prime 中将 num 设为静态
  • 你可以动态分配num(记得释放它)
  • 您可以将 num 传递给 prime 方法。

关于c - 单个 printf 语句如何更改数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17962045/

相关文章:

c - 建立与 IRC 的连接

c - 如何重复将文本 append 到 C 中的字符串?

c - 从 Bash 终端重新启动 C 程序

c++ - 奇怪的! linux 和 windows sprintf float 到文件

c - 从二维字符数组打印字符串

c - C 中指向数组的指针

c - 单词排序在本地运行完美,但在线运行时出错

c - 'printf("%n %d", &a, a)' 定义明确吗?

C - 无需计算机的数据类型转换

c - 简单的 C 程序,printf 不打印