有人可以告诉我这段代码有什么问题吗?
#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@
答案 0 :(得分:4)
您正在使用指向您不拥有的内存的指针读回数据;这样做的行为是 undefined 。
yes
和no
仅在函数prime
中定义。
该函数退出后,指针悬空。
考虑在全局范围内编写const char* yes = "Number is a prime";
等,更改prime
以返回int
,其中1表示素数而0表示素数,并使用{{1}中的返回值输出相关的字符串。这不仅可以修复你的错误,而且它是一个很好的设计,因为main
不应该真正关心如何它的输出值被消耗:这是另一个与呈现结果有关的函数的工作。您的素数测试也可以进行优化:特别是,您只需要达到prime
的平方根。
请注意我是如何使用N
表示数据保存在只读内存中的。