这个C语言程序错在哪里?

来源:百度知道 编辑:UC知道 时间:2024/06/22 23:17:17
现有一程序,其功能是根据输入的某人的身份证号输出这个这个人的出生年月日。程序本身有两个错误,一个警告,请各位高手指教。谢谢。
程序:
#include<stdio.h>
void main()
{
char *p;
char str[30]={"321322198811060426"};
p=cut(str,6,8);
puts(p);
putchar('\n');
}
char *cut(char *str,int begin,int num)
{
char substring[20];
int i;
for(i=0;i<num;i++)
substring[i]=str[begin+i];
substring[i]='\0';
return(substring);
}

substring是临时变量,函数退出后,临时变量就销毁了
所以这种用法是错误的,可以把它定义为全局变量:

#include<stdio.h>

char substring[20];
char *cut(char *str,int begin,int num)
{
int i;

for(i=0;i<num;i++)
substring[i]=str[begin+i];
substring[i]='\0';
return(substring);
}

void main()
{
char *p;
char str[30]={"321322198811060426"};
p=cut(str,6,8);
puts(p);
putchar('\n');
}

是p=(str,6,8)这句错了

1.char str[30]={"321322198811060426"};
改成char str[]="321322198811060426";

2.最重要的一个错误:你功能函数返回的指针后它指向的内存被销毁,导致取内容时出错,解决方法用引用或是数组名传递但不要用指针传递.