- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码,它应该在单独的行上显示每个输入单词。为了好玩,我放置了一个 printf
来显示每个单词后的字数,以确保我理解逻辑。
#include <stdio.h>
/*Write a program that prints its input one word per line*/
#define IN 1
#define OUT 0
int main()
{
int c, state, wordcount;
state = OUT;
while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\t' || c == '\n')
{
if (state == IN)
{
printf("\n");
printf("Current word count: %i\n", wordcount);
/*troubleshooting*/
state = OUT;
}
}
else if (state == OUT)
{
state = IN;
putchar(c);
++wordcount;
}
else
{
putchar(c);
}
}
}
此图显示了此操作的输出。由于某种原因,没有将 wordcount 变量初始化为 0,它从 9 开始。
Wordcount variable gets set to 9 when it is not initialized to 0
当将 wordcount 变量初始化为 0 时(只需在 int 声明语句中设置 wordcount = 0),一切都会按预期工作:
Wordcount variable is correct when initialized to 0
有人可以向我解释一下这是怎么回事吗?这与这些变量在内存中的存储方式有关系吗?试图了解发生了什么事。谢谢!
最佳答案
在OP编辑问题之前:
这是未定义的行为。
if (state == IN)
//Some code
else if (state == OUT)
//Some code
看起来 State
在比较之前尚未初始化(或设置为值)。未初始化的值并不是未定义行为,但以这种方式访问绝对会引起 UB 的恐惧!
在C89中,请参阅第 6.5.7 节初始化。
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, it is initialized implicitly as if every member that has arithmetic type were assigned 0 and every member that has pointer type were assigned a null pointer constant
在C99中,请参阅第6.7.8节初始化
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, then: — if it has pointer type, it is initialized to a null pointer; — if it has arithmetic type, it is initialized to (positive or unsigned) zero; — if it is an aggregate, every member is initialized (recursively) according to these rules; — if it is a union, the first named member is initialized (recursively) according to these rules.
引用standard section 6.3.2.1p2 :
If the lvalue designates an object of automatic storage duration that could have been declared with the register storage class (never had its address taken), and that object is uninitialized (not declared with an initializer and no assignment to it has been performed prior to use), the behavior is undefined.
根据C99标准,它的“不确定值”,它要么是一个未指定的值,要么是一个陷阱表示。
但是,在了解这些标准提供的次要细节之前,您应该先了解一些最常见和最好了解的编码习惯。这可能是一个好的开始。
<小时/>OP编辑后:
我从 OP 运行了完全相同的代码,其中 state = OUT;
即 State
已初始化,它的行为方式应该如此。
标准输入:
Lazy Frog
输出:
Lazy
Current word count: 1
Frog
Current word count: 2
关于c - 未初始化为 0 时的有趣值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47546497/
文档:https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度,生成一次是10点,正好10
我有一个工具按钮和一个分配给它的操作。但该操作没有点击事件,也没有点击代码。因此该按钮被禁用,如何将其更改为启用? 谢谢! 最佳答案 当某个操作没有 OnExecute 处理程序时,该操作始终处于禁用
我有一个 C 程序,它初始化两个结构并尝试打印它们的值。请参阅下面的代码。 #include #include typedef struct node{ int data; struc
我在回答 this question当我想到这个例子时: #include void func(int i); void func(); int main (){ func(); r
这些bug可能够你喝一壶的。 1、被断言(assert)包含的代码 常发生在切换到release版本时,执行结果乖乖的,最终查找结果是assert括号里的代码在release下是不执行的。
我正在谈论一个独立的对象,稍后我想使用 saveOrUpdate() 进行更新。 我们如何同时设置 null 和clear()引用的集合? A[1:1]B[1:M]C B 到 C 的引用可以为空,这意
我最近完成了 Marjin Haverbeke 的书“Eloquent Javascript, Second Edition”中的一项挑战。 One had to create此控制台输出使用 for
我写了一个 HtmlHelper 表达式,我花了很多时间将标题标签放入我的下拉列表中,如下所示: public static HtmlString SelectFor( thi
你知道有哪些开放的软件项目有特别有趣/写得很好的单元测试吗? 编写单元测试对我来说通常感觉很奇怪,因为它似乎太随机、太密集、太稀疏,……阅读一些现实世界的例子(而不是书籍、图书馆示例代码等)会很棒。
我有一个我目前正在使用的 Silverlight 应用程序,它为其 MVVM 框架实现了 Caliburn.Micro。一切正常,但我注意到一些绑定(bind)中的一些有趣之处。我拥有的是处理应用程序
我通过 swscale 运行 png 图像数据以获取 YUV420P 数据,然后使用 MSMPEG4V1 编解码器对该帧进行编码,从而在 iPhone 上对一些视频进行编码。在 api 文档中,avc
我写了一个页面,发现 addEventListener("loadedmetadata",fun) 在 firefox 上运行不正确 我正在尝试修复一个旧软件的错误。在加载视频和页面时,该软件尝试在页
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一名优秀的程序员,十分优秀!