CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

奇怪的问题,这段程序怎么什么都没有输出??????????????????

楼主mfm80629(SOS)2002-01-23 12:57:09 在 C/C++ / C语言 提问

#include   <iostream.h>  
  #include   <string.h>  
   
  int   main(void)    
  {    
  char   tmp_char[5];  
  char   tmp_year[3];  
  char   tmp_month[1];  
  int   ii;  
  strcpy(tmp_char,"200101");  
   
  cout   <<   tmp_char[0]   <<   tmp_char[1]   <<   tmp_char[2]   <<   tmp_char[3]   <<   tmp_char[4]   <<   tmp_char[5];  
   
  for   (ii   =   0;ii   <=   3;ii   ++)  
  strcat(tmp_year,&tmp_char[ii]);  
   
  cout   <<   tmp_year;  
   
   
  return   0;    
  }    
  问题点数:20、回复次数:10Top

1 楼kinghawk(惊鸿)回复于 2002-01-23 13:08:31 得分 10

这种程序有什么用?而且还危险的很!  
  真不知是谁编的,用来干什么的?  
  不过关于你的问题,并不是每个程序都要有输入,上面的一段程序中,strcpy实际上已经将值赋给了tmp_char,strcat将值赋给了tmp_year,唯一没有使用的是tmp_month。  
  但我还是强烈建议你不要看这种程序,虽然编译器也许没有报错,但实际上错误一大堆!Top

2 楼kinghawk(惊鸿)回复于 2002-01-23 13:20:48 得分 0

我改了一下,你看看!  
  #include   <iostream.h>  
  #include   <string.h>  
   
  int   main(void)    
  {    
  char   tmp_char[7]="\0";  
  char   tmp_year[3]="\0";  
  char   tmp_month[2]="\0";  
   
  int   i;  
  strcpy(tmp_char,"200101");  
  tmp_char[6]='\0';  
   
  for(i=0;i<7;i++)  
  cout<<tmp_char[i];  
  cout<<endl;  
   
  strcat(tmp_year,tmp_char);  
  tmp_year[4]='\0';  
   
  for(i=4;i<7;i++)  
  tmp_month[i-4]=tmp_char[i];  
   
  cout<<tmp_year<<endl;  
  cout<<tmp_month<<endl;  
   
  return   0;    
  }Top

3 楼ginger(似水流年)回复于 2002-01-23 13:22:56 得分 0

问题好象出在  
  for   (ii   =   0;ii   <=   3;ii   ++)  
  strcat(tmp_year,&tmp_char[ii]);  
   
  改为  
  strcat(tmp_year,tmp_char);Top

4 楼tief(但求中庸)回复于 2002-01-23 13:24:13 得分 0

首先你的程序存在数组下表越界。tmp_char[index=5]这个元素是不存在的,而且tmp_year也没有足够的空间用于完成strcat。  
  但是理论上可以输出,不过实际上的确没有任何输出,只能解释为以下原因:cout输出流被后面的坏数据破坏(由于tmp_year没有被初始化,不能保证原始内容为"")。可以进行如下改动:  
   
   
  #include   <iostream.h>  
  #include   <string.h>  
   
  int   main(void)    
  {    
  char   tmp_char[10];  
  char   tmp_year[30]={0};  
  int   ii;  
  strcpy(tmp_char,"200101");  
   
  cout   <<   tmp_char[0]   <<   tmp_char[1]   <<   tmp_char[2]    
  <<   tmp_char[3]   <<   tmp_char[4]   <<   tmp_char[5]   <<   endl   ;  
   
  //   cout   <<   int(tmp_year[0])   <<   endl   ;  
   
  for   (ii   =   0;ii   <=   3;ii   ++)  
  strcat(tmp_year,&tmp_char[ii]);  
   
  cout   <<   tmp_year   <<   endl   ;  
   
  return   0;    
  }    
  Top

5 楼szlbyou(无里头)回复于 2002-01-23 13:31:32 得分 0

应该是数组越界造成的错误Top

6 楼tiger_wkh52741(走走.跑跑.瞧瞧!)回复于 2002-01-23 13:50:50 得分 0

是不是没有进行内存分配啊?  
  Top

7 楼mfm80629(SOS)回复于 2002-01-23 14:11:30 得分 0

谢谢雪鹰.  
  to   tief   我想得到其中的“2001“,可是如果char   tmp_year[30]=“”;的话,怎么会得出一长串东西?????Top

8 楼tief(但求中庸)回复于 2002-01-23 16:25:28 得分 10

你要得到“2001”的话就直接  
   
  strcat(tmp_year,tmp_char)就ok了。  
   
  因为按照指针的移位和函数的语义,你把2001,001,01,1分别向tmp_year连接了一次   ^_^Top

9 楼heimeng()回复于 2002-01-23 16:46:59 得分 0

倒~Top

10 楼juqiang(方枪枪(正在修炼伤心小箭))回复于 2002-01-23 16:54:04 得分 0

我只看了几行,下面没看。不过,有错误:  
  char   tmp_char[5];包括\0只有5位,其实包含4位字符。而你后面的  
  strcpy(tmp_char,"200101");  
  6位字符,当然超界了!!!  
  Top

相关问题

  • 为什么这段程序输出这个?好奇怪。
  • 一段程序的输出问题,疯了~
  • 来看看这段程序的输出是什么
  • 一段很简单的程序,但是输出却很急怪!!!
  • 为什么下面2段程序输出结果不同~~~~~
  • 帮忙看下这段程序为什么没有输出?
  • 求程序输出结果
  • 程序输出的问题
  • 奇怪的程序
  • 我刚开始学c++,想不通这段程序的输出结果。

关键词

  • tmp
  • strcpy
  • year
  • char
  • include int main

得分解答快速导航

  • 帖主:mfm80629
  • kinghawk
  • tief

相关链接

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

广告也精彩

反馈

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