急求C语言找错指导!!!!!(返回字符串的函数问题)

来源:百度知道 编辑:UC知道 时间:2024/05/27 12:22:23
#include"stdio.h"
char* fun(int num1)
{
char *string1,*string2;
char str1[5]="yes",str2[5]="no";
int num;
*string1=str1;
*string2=str2;
num=num1/2;
if(num*2==num1)
return string1;
else
return string2;
}
main()
{
int num2;
char *result;
clrscr();
printf("please input a integer:");
scanf("%d",&num2);
result=fun(num2);
printf("%s",result);
sleep(5);
}
哪位帮忙找下错在哪里,运行后出现乱码!

第一处错误

*string1=str1;
*string2=str2;

/* *string1和*string2是指向这个地址的数据 */

应改称
string1=str1; //把str1字符串的地址赋给string1指针。
string2=str2; //同上

#########################################

第二出错误

char str1[5]="yes",str2[5]="no";

这些应该在函数外定义,作为全局变量来使用才可以
因为在C语言中函数内的局部变量在函数结束时销毁,
所以string1返回的地址里的字符串已经失效了,
所以返回乱码,你也可以定义成静态变量别让它消失。

可以如下定义,也可以在函数外定义

static char str1[]="yes";
static char str2[]="no";

######################################3

给你完整代码

#include<stdio.h>

char* fun(int num1)
{
char *string1,*string2;
static char str1[]="yes";
static char str2[]="no";
int num;
string1=str1;
string2=str2;
num=num1/2;
if(num*2==num1)
return string1;
else
return string2;
}
void main()