为什么这段代码不起作用?它涉及在c中使用指针和函数

时间:2015-12-17 10:00:40

标签: c pointers

有人可以告诉我这段代码有什么问题吗?

#include <stdio.h>
#include <stdlib.h>

char * prime(int N);

int main()
{

    char* p = prime(13);
    printf("%s", p);
    return 0;
}

char * prime(int N)
{
    int i,j=1;
    char yes[] = "Number is a prime";
    char no[] = "Number is not a prime";

    for(i=2; i<=N-1; i++)
    {
        if(N%i == 0)
            j=0;
    }

    if(j == 1)
        return yes ;
    else
        return no ;
}

预期产出=

Number is a prime

显示输出=

$0@

1 个答案:

答案 0 :(得分:4)

您正在使用指向您不拥有的内存的指针读回数据;这样做的行为是 undefined

yesno仅在函数prime中定义。

该函数退出后,指针悬空

考虑在全局范围内编写const char* yes = "Number is a prime";等,更改prime以返回int,其中1表示素数而0表示素数,并使用{{1}中的返回值输出相关的字符串。这不仅可以修复你的错误,而且它是一个很好的设计,因为main不应该真正关心如何它的输出值被消耗:这是另一个与呈现结果有关的函数的工作。您的素数测试也可以进行优化:特别是,您只需要达到prime的平方根。

请注意我是如何使用N表示数据保存在只读内存中的。