| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 483 人关注过本帖
标题:我写的这个字符串处理过程有点小问题
只看楼主 加入收藏
yangchuan545
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-4-5
收藏
 问题点数:0 回复次数:3 
我写的这个字符串处理过程有点小问题

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

搜索更多相关主题的帖子: 字符 
2006-10-14 23:25
isoliyang
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-9-23
收藏
得分:0 

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

2006-10-15 08:17
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用isoliyang在2006-10-15 8:17:33的发言:

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

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

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


倚天照海花无数,流水高山心自知。
2006-10-15 10:05
yangchuan545
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-4-5
收藏
得分:0 

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

2006-10-15 10:18
快速回复:我写的这个字符串处理过程有点小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016406 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved