我在vc++6.0下运行结果没有问题,但是运行后总会有个提示框“遇到问题需要关闭”,所以将我的源程序发上来
麻烦各位帮我看下。
/*****************************************************
*功能描述:先将学生信息送入结构体s1中存放,然后组合成
* 规定格式的字符桢(利用strcat函数)
* 学号;姓名;性别;(注意其中的分号为分隔符)
* 然后处理字符针,利用strchr函数依次将学号,姓名
* 学号取出存入结构体s2。然后打印输出
******************************************************/
#include"stdio.h"
#include"string.h"
#include"malloc.h"
void PrintInput(void);
void PrintOutput(void);
void strAdd(char *strForward , char *strBackward);
char *strDiv(char *strHead);
typedef struct {
char strNum[11]; //学号为10位
char strName[20]; //姓名
char strSex[6]; //性别
}Student;
Student s1,s2;
void main()
{
char string[]="";
char *p;
/* print message and input the message */
PrintInput();
/* 组装成字符桢 */
strAdd(string , s1.strNum);
strAdd(string , s1.strName);
strAdd(string , s1.strSex);
/* 将字符针打印输出 */
printf("the new string is:%s\n",string);
/* 去字符针中的学号,将学好存入s2.strNum中 */
if((p=strDiv(string)) == NULL)
printf("error in get the student's number!\n");
else
strcpy(s2.strNum , p);
if((p=strDiv(string)) == NULL)
printf("error in get the student's name!\n");
else
strcpy(s2.strName , p);
if((p=strDiv(string)) == NULL)
printf("error in get the studen's sex!\n");
else
strcpy(s2.strSex , p);
/* 将结构体s2中的信息输出 */
PrintOutput();
}
void strAdd(char *strForward , char *strBackward)
{
char end[]=";";
strcat(strForward , strBackward);
strcat(strForward,end);
}
void PrintInput(void)
{
printf("Please input the student's number(10 wei):");
scanf("%s",s1.strNum);
printf("\n");
printf("please input the student's name:");
scanf("%s",s1.strName);
printf("\n");
printf("please input the student's sex(women or man):");
scanf("%s",s1.strSex);
}
void PrintOutput(void)
{
printf("the student's number is:%s\n",s2.strNum);
printf("the student's name is:%s\n",s2.strName);
printf("the student's sex is:%s\n",s2.strSex);
}
char *strDiv(char *strHead)
{
char *temp,*p;
char strEnd=';';
temp=(char *)malloc(sizeof(20));
if((p=strchr(strHead,(int)strEnd)) == NULL)
{
free(p);
free(temp);
return NULL;
}
else
{
*p='\0';
strcpy(temp,strHead);
strcpy(strHead,++p);
return(temp);
}
}