在下面的代码中,fizz正确打印,但buzz不正确。在这里使用char数组有什么问题,或者以什么方式使用它是错误的?

#include <stdio.h>

int main() {

    int i;

    char *fizz = "fizz";
    char buzz[4] = "buzz";

    for(i = 1; i <= 100; i++) {
            if(!((i %3 == 0) || (i%5 == 0)))
                    printf("%d", i);
            if(i%3 == 0)
                    printf("%s", fizz);
            if(i%5 == 0)
                    printf("%s", buzz);

            printf("\n");
    }
}

最佳答案

两个字符串实际上都不是4字节长。C字符串是以NUL结尾的,因此它们的长度总是以字符为单位,加上'\0'字符的长度。因此,您应该将buzz的声明更改如下:

char buzz[5] = "buzz";

但是,还要注意,使用字符串文字初始化时显式声明变量的长度不是必需的。你只要把号码忘了就行了。
char buzz[] = "buzz";

10-06 04:08