这个C语言题目究竟谁该背锅?竟然是它。。。
各位,今天给大家带来一道有问题的C语言题目,初学者犯这种错误的可能性不小,大家来看一下这应该是谁的锅呢?问题代码如下:
其实这段代码是比较简单的,意图是定义一个 del_space() 函数,用于删除字符串中的空格。在 main() 函数中传递给 del_space() 函数的是“Hello All Time!”,预期输出应该是 “HelloAllTime!”,但实际的输出的确是“HelloAllTime!e!”,看下面的图:
这到底是哪里出了问题呢?
这位小伙伴自己琢磨了半天,以为是函数里用一个变量str导致的,因此他创建了一个30字符的临时数组,最后再把a复制到str,修改如下:
修改过后的程序运行结果如图:
我们可以发现修改过后程序的确可以按照要求输出了 “HelloAllTime!”,但这真是问题的真正原因吗?其实不是的。
回答这个问题之前我们先明确一个大家都知道的基础知识:字符和字符串的区别,‘h'表示字符h,占一个字节,而“h"为字符串h,加上空字符一共两个字节,也就是说字符串都是以空字符结尾。这道题问题其实就出在这里, del_space() 函数中的目标 str 没有指定结束字符空字符,删掉两个空格后原str中的最后两个字符e和!还在,而!后面才是空字符,因此打印字符串时候到空字符才停止,所以该背锅的因该是空字符,修改很简单,最后追加空字符就可以了,如下:
写在最后:
通过这道题,我们可以看出出错的地方往往是最不起眼的地方,所以在编程语言的学习中,细节同样很重要,一点一滴都不能放过,否则你将付出十倍的精力来处理它,请大家牢记!
欢迎大家留言区讨论哦!
Wink !
▼往期精彩回顾▼