打印字母组合时,行为为NULL'\ 0'的错误行为

时间:2019-07-07 19:52:52

标签: c null cs50

我想用这段代码来打印字母之间的所有可能组合,**包括单个字母。**我是从CS50x课程(第2周-破解)中编写程序的这一部分的

我包括使用'\0'来获得单个字母。一切正常,直到开始使用大写字母为止,之后每两个循环将跳过'\0'。结果是我丢失了单个大写字母的一半,而且我不知道为什么这样做。

这是我得到的结果的一部分(这部分是正确的,注意单个字母'g','h','i'都已打印):

  

Blockquote fZ g ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz gA gB gC gD gE gF gG gH gI gJ gK gL gM gN gO gP gQ gR gS gT gU gV gW gX gY gZ gY gZ h ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz hA hB hC hD hE hF hG hH hI hJ hK hL hM hN hO hP hQ hR hS hT hU hV hW hX hY hZ i 即时

但是过一会儿它开始跳过字母(打印“ W”和“ Y”,但不打印“ X”)

  

Blockquote VZ W Wa Wb Wc Wd We Wf Wg Wh Wi Wj Wk Wl Wm Wn Wo Wp Wq Wr Ws Wt Wu Wv Ww Wx Wy Wz WA WB WC WD WE WF WG WH WI WJ WK WL WM WN WO WP WQ WR WS WT WU WV WW WX WY WZ Xa Xb Xc Xd Xe Xf Xg Xh Xi Xj Xk Xl Xm Xn Xo Xp Xq Xr Xs Xt Xu Xv Xw Xx Xy Xz XA XB XC XD XE XF XG XH XI XJ XK XK XL XM XN XO XP XQ XR XS XT XU XV XW XX XY XZ Y < / strong>是

这是原始代码:

int main(void)
    {
        char abc[52] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
        char xyz[3];
        char null = '\0';

        for (int i = 0; i < 52; i++)
        {
            xyz[0] = abc[i];
            xyz[1] = null;
            printf("%s  ", xyz);
            for (int j = 0; j < 52; j++)
            {
                xyz[1] = abc[j];
                printf("%s  ", xyz);
            }
        }

        printf("\n");    
    }'''

2 个答案:

答案 0 :(得分:1)

使用

xyz[1] = abc[j];

您将覆盖刚刚设置的空终止符。

更好地将整个数组初始化为零(空终止符)

char xyz[3] = { '\0' };

然后,您无需为内循环第二次显式设置空终止符。

答案 1 :(得分:0)

好的,所以我继续学习课程的下一周,他们介绍了一个IDE,我曾经尝试过。正如@Weather Vane指出的那样,它这次完美运行。因此,我认为代码不是完全错误的,只是在某种程度上,我之前在其上编译和运行程序的沙箱可能是问题所在。感谢所有发布者!