灵异事件,求真相

C语言 码拜 8年前 (2016-04-23) 929次浏览
自学C Primer中,看书做题刚到第7章,然后练习题里有这样一个题目
要求输出一个句子,遇到”#”结束,然后把句子中的”.”(句号)替换为”!”(感叹号),把”!”(感叹号)替换为”!!”(感叹号X2),然后输出替换后的句子

#include<stdio.h>
#include<string.h>
const char Stop = "#";
const char Symbol_1 = ".";
const char Symbol_2 = "!";
const int MaxLen = 100;
int main(void)
{
  char chs[MaxLen];
  char Letter;
  int Counts = 0;
  int Times = 0;
  printf("Please Input Words To Test:\n");
  while((Letter = getchar()) != Stop)
  {
    if(Letter == Symbol_1)
    {
      chs[Counts] = Symbol_2;
      ++Counts;
      ++Times;
    }
    else
      if(Letter == Symbol_2)
      {
        chs[Counts] = Symbol_2;
        chs[Counts+1] = Symbol_2;
        Counts += 2;
        ++Times;
      }
      else
      {
        chs[Counts] = Letter;
        ++Counts;
      }
  }
  printf("%d Times\n",Times);
  printf("%s\n",chs);   //<--这个很奇葩
//  int Len = strlen(chs);    //<--问题出在这3行代码里
//  for(int i = 0 ; i < Len+1 ; ++i)
//    printf("%c ",chs[i]);
 return 0;
}

本来本人写好代码(开始没加那3行代码),编译运行后出现一个问题,例如本人输入”qwqw..!!#qw”
然后替换次数为4次,这没问题,但最后用printf()显示替换后的字符串,正确的结果应该是qwqw!!!!!!
但在本人的系统(ubuntukylin14.04)里结果是
qwqw!!!!!!D 
字符串后面莫名其妙的多了2个不知道是什么东东。灵异事件,求真相
然后本人为了确认下这2个奇葩到底是什么,所以就在代码上加了那3行,本人本来想着一个一个的输出,看看最后2个字符到底是什么,
结果。编译完成后运行程序,本人发现程序好了。灵异事件,求真相
这时候本人在输入”qwqw..!!#qw”
结果为
qwqw!!!!!!!   <–最关键的是本人想知道为什么这行也正常了。
q w q w ! ! ! ! ! ! !

解决方案

20

字符串以\0结尾,假如找不到\0,就会一直去解析这个字符串,导致出现一些乱码

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明灵异事件,求真相
喜欢 (0)
[1034331897@qq.com]
分享 (0)