自学C Primer中,看书做题刚到第7章,然后练习题里有这样一个题目
要求输出一个句子,遇到”#”结束,然后把句子中的”.”(句号)替换为”!”(感叹号),把”!”(感叹号)替换为”!!”(感叹号X2),然后输出替换后的句子
要求输出一个句子,遇到”#”结束,然后把句子中的”.”(句号)替换为”!”(感叹号),把”!”(感叹号)替换为”!!”(感叹号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,就会一直去解析这个字符串,导致出现一些乱码