c';s printf函数知道如何在没有\0的情况下停止吗?

c';s printf函数知道如何在没有\0的情况下停止吗?,c,C,我只是想知道你是否能帮我澄清一些事情 让我们用一些示例代码来解释我的问题: #include <stdio.h> int main(void) { char test[100]; printf("%s",test); return 0; } 它将输出“a”,并附加到该字符或其他字符,然后停止 这就是我对数组的理解:数组是指向第一个地址的指针,括号是地址加上sizeof(type)的次数后的解引用 因此,在这种情况下,第一个示例中内存中的随机0110001(

我只是想知道你是否能帮我澄清一些事情

让我们用一些示例代码来解释我的问题:

#include <stdio.h>

int main(void)
{
    char test[100];
    printf("%s",test);
    return 0;
}
它将输出“a”,并附加到该字符或其他字符,然后停止

这就是我对数组的理解:数组是指向第一个地址的指针,括号是地址加上sizeof(type)的次数后的解引用

因此,在这种情况下,第一个示例中内存中的随机0110001(Ascii'a')对于printf来说应该与第二个示例中故意放置的0110001(Ascii'a')无法区分。然而,当我运行printf时,我并没有得到100个随机输出。我有一个。我不假设随机场通常设置为“\0”


也就是说,我的理解肯定是错的。请帮助我理解我在哪里犯了错误。

没有,这是未定义的行为。您的程序只是意外地打印了非“预期”值

#包括
内部主(空)
{
炭试验[100];
printf(“%s”,测试);
返回0;
}

你不能期望上面的代码做任何可预测的事情,它可能会打印一些东西,它可能会出错,无法预测实际会发生什么,因为这样的程序的行为是严格未定义的。

它没有,它是未定义的行为。您的程序只是意外地打印了非“预期”值

#包括
内部主(空)
{
炭试验[100];
printf(“%s”,测试);
返回0;
}

你不能期望上面的代码做任何可预测的事情,它可能会打印一些东西,它可能会出错,无法预测实际会发生什么,因为这样的程序的行为是严格未定义的。

看起来“未定义的行为”对你的发现来说是个好名字。可能是“c的printf函数如何知道在没有\0的情况下如何停止?”-->
test[100]
未初始化。因此它可能有一个
\0
。我们不知道它是“没有\0的”。看起来“未定义的行为”对于您的发现是一个很好的名称。“c的printf函数如何知道在没有\0的情况下如何停止?”?“-->
测试[100]
未初始化。所以它可以有一个
\0
。我们不知道它是“没有\0”。所以,你是说它可能会打印出100个不同的未定义值?是的,这是一种行为。由于它是未定义的,原则上它可以删除你的高清。“但这当然是非常不可能的,也许是不可能的。”指挥官282是的,这就是它的工作原理。虽然说它是8比特并不完全正确,但这与断言无关。它将从输入参数中读取字节,直到找到
'\0'
,这是字符串成为c语言字符串所必需的。而且,它什么也不懂!它只调用适当的系统函数来打印值,值是否有效对
printf()
无关紧要,如果存在
“\0”
,也无关紧要,但如果没有,则无法知道会发生什么。@commoner282您正在试图找到对未定义行为的解释,不要这样!!!没有任何解释,这只是一个意外,仅此而已。我很高兴你现在有了更清晰的理解。@Commoner 282对于未定义的行为,更难“理解”的一点是,它不一定是随机的。有时它是——有时它是完全不确定的——但有时它一次又一次地做同样的事情,让你觉得它一定有意义。但事实并非如此。那么,你是说它可能会打印出100个不同的未定义值?是的,这将是一种行为。由于它是未定义的,原则上它可以删除你的高清。“但这当然是非常不可能的,也许是不可能的。”指挥官282是的,这就是它的工作原理。虽然说它是8比特并不完全正确,但这与断言无关。它将从输入参数中读取字节,直到找到
'\0'
,这是字符串成为c语言字符串所必需的。而且,它什么也不懂!它只调用适当的系统函数来打印值,值是否有效对
printf()
无关紧要,如果存在
“\0”
,也无关紧要,但如果没有,则无法知道会发生什么。@commoner282您正在试图找到对未定义行为的解释,不要这样!!!没有任何解释,这只是一个意外,仅此而已。我很高兴你现在有了更清晰的理解。@Commoner 282对于未定义的行为,更难“理解”的一点是,它不一定是随机的。有时它是——有时它是完全不确定的——但有时它一次又一次地做同样的事情,让你觉得它一定有意义。但事实并非如此。
test[0] = 'a'
printf("%s",test);
#include <stdio.h>

int main(void)
{
    char test[100];
    printf("%s",test);
    return 0;
}