C语言打印中的出人意外

这是典型的数组越界问题。在字符串中末尾结束标志‘’编译是会自动加上并占用一个字符的空间,在输出的时候,默认为碰到‘’时结束该字符串的输出,而你这里很明显没有,从而产生了随机字符的输出,并异常终止。这里把26改大或者其他操作就能正常输出。
lets长度为26,而A到Z有26个,所以lets字符串缺少一个空字符(),printf('%s',lets);遇到空字符停止。删掉26则是由编译器分配空间,会包含空字符。加上空字符要复杂一些,简单地说就是,c保证且只保证数组后面一个地址有效,所以加上空字符也可以看似正常执行。至于后面多出来的,是因为printf()遇到了它们后面的空字符,空字符在程序中存在的地方还是挺多的,printf()遇到空字符就停止了。
文章标签:

本文链接:https://www.u1e.cn/baike/a/87469061eaadd4e9b25e0f22 [复制]

猜你喜欢

歇后语大全

还没有人回应过