繁体   English   中英

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

[英]How does c's printf function know how to stop without a \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(type)后的解引用。

因此,在那种情况下,对于第一个示例中故意放置的01100001(Ascii'a'),在第一个示例中的内存中发现的随机01100001(Ascii'a')与第二个示例中的故意放置的01100001(Ascii'a')应该没有区别。 但是,当我运行printf时,我没有得到100个随机输出。 我拿一个 而且我不认为随机字段通常设置为“ \\ 0”。

这意味着,我的理解在某处一定是错误的。 请帮助我了解我在哪里犯错。

并非如此,这是未定义的行为。 您的程序只是意外地打印出un“ 期望的 ”值。

#include <stdio.h>

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

您不能期望上面的代码做任何可预测的事情,它可能会打印某些内容,可能会出现段错误,由于这种程序的行为是严格未定义的,因此无法预测实际会发生什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM