如果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 )