糖逗 发表于 2019-10-31 10:32:50

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 10:54:30

本帖最后由 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")                                                         ;
      }
}

糖逗 发表于 2019-10-31 12:03:08

jackz007 发表于 2019-10-31 10:54
楼主,你是强行按 5 x 5 的阵列来显示 array 中除 '\0' 以外的每一个字符,可是,你的每一个单词 ...

非常感谢,明白了!很清晰的解答!
页: [1]
查看完整版本: C++23课动手2题的疑问