【发布时间】:2022-08-13 01:09:56
【问题描述】:
为什么 printf 会为 4 个不同的 char[] 变量显示不同的输出,如果它们都具有相同的值?
这是我的代码:
#include <stdio.h>
#define MAX 1000
main()
{
char w[MAX];
char x[MAX];
char y[MAX];
char z[MAX];
printf(\"w: %s\\n\", w);
printf(\"x: %s\\n\", x);
printf(\"y: %s\\n\", y);
printf(\"z: %s\\n\", 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
-
这与您发布的警告无关,但没有初始化任何变量,因此说它们具有相同的值是不正确的。实际上这段代码有未定义的行为。特别是使用
%s打印时,变量应包含以零结尾的字符串。 -
w, x, y, z不是字符串,因为您尝试在printf和%s中处理它们。 char 和 int 具有相同的字节值(我认为他们称之为他们)。 -
顺便说一句,您的具体警告是因为您没有提到
main()的返回类型应该是int。 -
if they all have the same value?你怎么知道价值他们有? -
您需要了解并修复该警告消息。
标签: arrays c initialization printf c-strings