第一处错误
*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
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()
{
int num2;
char *result;
printf("please input a integer:");
scanf("%d",&num2);
result=fun(num2);
printf("%s",result);
}
char str1[5]="yes",str2[5]="no";
分配的空间在
char* fun(int num1)
的栈上
当函数返回的时候返回一个指向
char* fun(int num1)的栈内的指针
而函数返回的时候char* fun(int num1)
分配的空间已经回收了,你返回的指针指向的当然是乱码了!
解决方案:
#include"stdio.h"
#include "string.h"
void fun(int num1,char* result)
{
char str1[5]="yes",str2[5]="no";
int num;
num=num1/2;
if(num*2==num1) /*可以直接用num1%==0*/
strcpy(result,str1);
else
strcpy(result,str2);
}
main()
{
int num2;
char result[10];
/* clrscr(); */
printf("please input a integer:");
scanf("%d",&num2);
fun(num2,result);
printf("%s",result);
/* sleep(5); */
}
我把我的编译器不支持的函数注释掉了
多了两颗*,少了两个头文件。
#include"stdio.h"
#include
#include
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);
}
char* fun(int num1)
{
char *string1,*string2;
char str1[5]="yes",str2[5]="no";
}
return 回去的时候,str1和str2的空间已经回收了,也就是返回的指针指向一块了未知区域。
相当混乱 虽然我也才学 但是我知道
printf("%s",result);
应该是
printf("%s",*result);
result是指针 输出的话 应该加个取内容 * 符号....
说错了别骂我 分给真的能帮你的人吧....
补充句..指针没学好的话 就先尽量不要用....
可以采用值传递的方式..
乱码?
那就不是程序有问题啊 是不是你的c有问题?