当前位置: 代码迷 >> C语言 >> 我写的这个字符串处理过程有点小问题
  详细解决方案

我写的这个字符串处理过程有点小问题

热度:255   发布时间:2006-10-14 23:25:31.0
我写的这个字符串处理过程有点小问题

我在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);
}
}

搜索更多相关的解决方案: 字符  

----------------解决方案--------------------------------------------------------

没有为string[]分配存贮空间


----------------解决方案--------------------------------------------------------
以下是引用isoliyang在2006-10-15 8:17:33的发言:

没有为string[]分配存贮空间

string[]="";这个还是有空间的
#include"stdio.h"

int main()
{
char str[]="";
printf("%d\n",sizeof(str));
return(0);
}
说明它还是有一个空间的.
原因是字符数组分配的空间太少,在做strcat就会出错.


----------------解决方案--------------------------------------------------------

我将字符串的定义改为了char string[40]="",没有出现问题了,谢谢!


----------------解决方案--------------------------------------------------------
  相关解决方案