C++23课动手2题的疑问
对于这个结果最后出现一个X的多余字符大家是怎么解释的?为什么会出现这个X?原问题:https://fishc.com.cn/forum.php?mod=viewthread&tid=72908&extra=page%3D1%26filter%3Dtypeid%26typeid%3D570
23课动一动手2 本帖最后由 jackz007 于 2019-10-31 11:33 编辑
楼主,你是强行按 5 x 5 的阵列来显示 array 中除 '\0' 以外的每一个字符,可是,你的每一个单词又不都是 5 个字符,最短的只有 3 个字符,对于只有 3 个字符的数组,你却要按 5 个字符来访问,显然就要跨过字符串结束标志 '\0',而字符串结束标志以后的内容属于我们不关心,同时,也是不确定的字符,本例中显示的字符 'X',应该就是属于这种情况,必须避免显示这种无效的字符。
我想,你的代码应该是这样改:
#include <stdio.h>
#include <string.h> // 因为要使用 strlen() 函数,所以,添加此头文件
int main(void)
{
const char * array = {"FishC" , "Five" , "Star" , "Good" , "WOW"} ;
for(int i = 0 ; i < 5 ; i ++) {
for(int j = 0 ; j < 5 ; j ++) {
if(i < strlen(array)) printf("%c " , * (array + i)) ;// 只显示字符串中位置在 '\0' 之前的字符
}
printf("\n") ;
}
} jackz007 发表于 2019-10-31 10:54
楼主,你是强行按 5 x 5 的阵列来显示 array 中除 '\0' 以外的每一个字符,可是,你的每一个单词 ...
非常感谢,明白了!很清晰的解答!
页:
[1]