奇怪的问题,这段程序怎么什么都没有输出??????????????????
#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




