我只是想知道你能否为我清理一些东西。c的printf函数如何在没有 0的情况下知道如何停止?
让我们有一些示例代码来说明我的问题:
#include <stdio.h>
int main(void)
{
char test[100];
printf("%s",test);
return 0;
}
如果我没有完全搞错了,这应该输出随机要么某些字符在这个内存地址之前,我宣布它还是什么,如果它是像在虚拟环境中一样空虚。所以,这是我的理解。在我把东西放入之前的记忆被理解为一个字符并写入终端。例如ascii'a'= 97 = 01100001.这就是为什么它输出'a'。可能是其他任何东西。或无。然后停止。
但如果我把在第一位置“A”,然后打印它像这样:
test[0] = 'a'
printf("%s",test);
它将输出“a”和另外给一些字符或什么,然后停止。
这是我的理解阵列:一种阵列是一个指向第一个地址和括号内是所述地址的解引用添加次数的sizeof(类型)到它之后。
因此,在这种情况下,第一个例子中在内存中找到的随机01100001(Ascii'a')应该与第二个例子中故意放置的01100001(Ascii'a')的printf不可区分。然而,当我运行printf时,我不会得到100个随机输出。我得到一个。而且我不假定随机字段通常设置为'\ 0'。
这意味着,我的理解一定是错误的地方。请帮助我了解我犯了我的错误。
看起来像“未定义的行为”将是你的发现的好名字。 – usr2564301
的可能的复制[什么时候的printf( “%S”,字符\ *)停止打印?](http://stackoverflow.com/questions/2726301/when-does-printfs-char-stop-printing) –
“如何c的printf函数知道如何停止没有\ 0?“ - >'test [100]'没有被初始化。所以它可以有一个'\ 0'。我们不知道它是“没有\ 0”。 – chux