CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

谁能帮我解答下面的问题,给100分。

楼主gprs_mac(事如春梦了无痕)2002-02-09 16:14:15 在 C/C++ / C语言 提问

#include   "stdio.h"  
  #include   "string.h"  
   
  #define   IN 1  
  #define   OUT 0  
   
  /*EOF:用CTRL+Z输入*/  
  main()  
  {  
        int       state;  
        int c;/*保存取到的每一个字符*/  
        char       *str;/*以字符串的形式保存每一个单词*/  
   
  state   =   OUT;/*在单词以外*/  
        str   =   "";  
   
        while((c   =   getchar())   !=   EOF)  
        {  
        if((c   !=   '   ')   &&   (c   !=   '\n')   &&   (c   !=   '\t'))  
              {  
              *str   =   c;/*将输入拷贝到一个字符串*/  
                    str++;  
              state   =   IN;  
              }  
              else   if(state   ==   IN)  
              {  
              state   =   OUT;  
                    *str   =   '\n';/*在每个单词后面加上换行符*/  
                    str++;  
              }  
  }  
        printf("\noutput   word   is   %s\n",str);/*按行输出单词*/  
  }  
  请教上面的程序有什么BUG?谢谢! 问题点数:100、回复次数:7Top

1 楼Lchaos(nicky)回复于 2002-02-09 16:25:47 得分 15

you   forget   to   alloc   space   for   string   str.Top

2 楼dongyingtao(dongyingtao)回复于 2002-02-09 16:25:58 得分 40

首先,你存放字符串的缓冲区没有分配空间,还有输入后str指向最后,你已经遗失了支付串的开始位置。改正如下:  
  #include   "stdio.h"  
  #include   "string.h"  
  #include   <stdlib.h>  
   
  #define   IN   1  
  #define   OUT   0  
   
  /*EOF:用CTRL+Z输入*/  
  main()  
  {  
  int   state;  
  int   c;/*保存取到的每一个字符*/  
  char   *str;/*以字符串的形式保存每一个单词*/  
  char   *head;  
  state   =   OUT;/*在单词以外*/  
  str   =   (char*)malloc(256);  
  head=str;  
  memset(str,0,256);  
  while((c   =   getchar())   !=   EOF)  
  {  
  if((c   !=   '   ')   &&   (c   !=   '\n')   &&   (c   !=   '\t'))  
  {  
  *str   =   c;/*将输入拷贝到一个字符串*/  
  str++;  
  state   =   IN;  
  }  
  else   if(state   ==   IN)  
  {  
  state   =   OUT;  
  *str   =   '\n';/*在每个单词后面加上换行符*/  
  str++;  
  }  
  }  
  printf("\noutput   word   is   %s\n",head);/*按行输出单词*/  
  }  
  Top

3 楼mountlin(我想睡觉了,下次再改昵称)回复于 2002-02-09 16:28:27 得分 30

两个明显错误:str没有分配空间,printf时str没有移到缓冲首,更正:  
  main()  
  {  
  int   state;  
  int   c;/*保存取到的每一个字符*/  
  char   buf[4096];  
  char   *str=buf;/*以字符串的形式保存每一个单词*/  
  ...  
  str=buf;  
  printf("\noutput   word   is   %s\n",str);/*按行输出单词*/  
  }  
  Top

4 楼Lchaos(nicky)回复于 2002-02-09 16:29:58 得分 15

you   can:  
  add   an   integer   to   count   the   number   of   characters,  
  first   to   alloc   a   certain   size   space   for   str,   if   the   character   count  
  is   over   that   number,   then   realloc   the   buffer   for   str.Top

5 楼gprs_mac(事如春梦了无痕)回复于 2002-02-20 18:33:19 得分 0

我已经为STR置初值了啊,为什么还要分配内存?Top

6 楼gprs_mac(事如春梦了无痕)回复于 2002-02-20 18:50:58 得分 0

已经解决,谢谢以上各位!Top

7 楼gprs_mac(事如春梦了无痕)回复于 2002-02-20 18:51:01 得分 0

已经解决,谢谢以上各位!Top

相关问题

  • 帮忙给解答一下
  • 请各位大侠帮助解答下面的三个问题
  • 谁能帮我解答下面4个问题?
  • 哪位能帮忙解答一下,下面这道题目阿。
  • 那位大侠能给出下面这条问题解答
  • 我面试时,提到下面的问题,虽能帮我解答一下
  • 一些问题,能帮忙解答者一定给分!!
  • 谁能帮我解答这些题目,就给分100
  • 下面几个是在编写多窗口浏览器时遇到的问题,希望大家帮助解答!
  • 哪位老兄能帮我解答一下下面语句的执行结果为什么不同?

关键词

  • 字符
  • word
  • 单词
  • 字符串
  • 保存
  • str
  • state
  • 分配
  • eof
  • 输入

得分解答快速导航

  • 帖主:gprs_mac
  • Lchaos
  • dongyingtao
  • mountlin
  • Lchaos

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo