C-相同的char[]变量,不同的输出



如果4个不同的char[]变量都有相同的值,为什么printf会为它们显示不同的输出?

这是我的代码:

#include <stdio.h>
#define     MAX 1000
main()
{
char w[MAX];
char x[MAX];
char y[MAX];
char z[MAX];
printf("w: %sn", w);
printf("x: %sn", x);
printf("y: %sn", y);
printf("z: %sn", z);
}

这是输出:

gcc test.c -o test && ./test
test.c:4:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
4 | main()
| ^~~~
w: 
x: ��<��
y: 
z: S�td

为什么printf对4个不同的char[]变量显示不同的输出如果它们都有相同的价值?

数组没有";相同的值";。您有未初始化的字符数组,具有自动存储持续时间,可以包含任何不确定的值

char w[MAX];
char x[MAX];
char y[MAX];
char z[MAX];

所以在printf 的调用中使用它们

printf("w: %sn", w);
printf("x: %sn", x);
printf("y: %sn", y);
printf("z: %sn", z);

调用未定义的行为。

如果在函数main之前声明数组,那么它们将被零初始化为具有静态存储持续时间。在这种情况下,它们将包含空字符串,您将获得类似的输出

w:
x:
y:
z:

注意,根据C标准,无参数的函数main应像一样声明

int main( void )

最新更新