一个字串中结束符'/0'引起的问题

 朋友发来一个对输入字串中的特定字串替换的例程,说该例程在VC++6.0下编译通过,但是运行结果却有误。
例程如下:
/*输入一串小于81的字串,输出将输入字串中的"BOY"替换成"CHILD"输出*/

#include<iostream.h>
#include<string.h>
void main()
{
 char s[81],t[150];
 int i=0,j=0;              
 cin.getline(s,81);
while(i<81 && j<150)
{
if(s[i]=='/0')
  {
    
     break;
  }
  if(s[i]=='B' && s[i+1]=='O' && s[i+2]=='Y')
  {
   t[j]='C';
   t[j+1]='H';
   t[j+2]='I';
   t[j+3]='L';
   t[j+4]='D';
   j=j+5;
   i=i+3;
  }
  else
  {
   t[j]=s[i];
   j=j+1;
   i=i+1;
  }
 
}
//t[i]='/0';
     cout<<t<<endl;
}


经检查后发现,原因是因为在输出字串t[]中缺少结符‘/0’,在字串符的输出中,输出函数将检查是否有‘/0’,如果有,则认为字串结束,停止输出,否则读取下一个字符,直到‘/0’出现。而在上述程序中,源字串s[]在出现‘/0’后则直接跳出循环,这时就出现了一个问题,目的字串t[]没有接收到来自s[]的结束符。在输出的时候,输出函数依然会以‘/0’为字串的结束符,在s[]应该结束的时候却没有出现'/0',输出函数将会继续往下读,直到一个‘/0’出现为止,而这个‘/0’在什么为止出现,这完全是不可预料的,假如在离s[]很远的地方才出现第一个‘/0’,那么此程序将会输出很大量的字符。
修改后的程序如下:

#include<iostream.h>
#include<string.h>
void main()
{
 char s[81],t[150];
 int i=0,j=0;              
 cin.getline(s,81);
while(i<81 && j<150)
{
if(s[i]=='/0')
  {
     t[i]='/0' ; //在跳出循环前給t[i]='/0'
     break;
  }
  if(s[i]=='B' && s[i+1]=='O' && s[i+2]=='Y')
  {
   t[j]='C';
   t[j+1]='H';
   t[j+2]='I';
   t[j+3]='L';
   t[j+4]='D';
   j=j+5;
   i=i+3;
  }
  else
  {
   t[j]=s[i];
   j=j+1;
   i=i+1;
  }
 
}
//t[i]='/0';
     cout<<t<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值