如果在 printf() 中将 0 传递给 %s 会发生什么?

bug*_*ird 1 c printf

我知道传递空指针会触发未定义的行为,但如果我使用calloc()初始化 char 数组并打印它,例如:

char * a = calloc(10, sizeof(char));
printf("%s\n", a);
Run Code Online (Sandbox Code Playgroud)

calloc()应该将 char 数组初始化为 0。由于在 ASCII 表中 0 指的是 NULL,所以我期望未定义的行为。然而,每次我运行它时,它实际上什么也打印不出来。这个输出是固定的吗?我可以推理输出吗?

orl*_*rlp 5

在 C 中,字符串通常被理解为在遇到的第一个 0 字节处终止。由于结果中的第一个字节的calloc值为 0,因此它被解释为立即结束字符串,留下空字符串。