在下面的代码(我的源代码的简化版本)中,在声明时正确初始化为lv
的变量1
在getline
内被调用时神秘地变为0 {1}}循环。如果您输入for
之外的任何内容,或通过gdb输入,则可以从printf
注意到它。变量在"cl"
调用后立即更改值。
最奇怪的是,在提示时输入getline
时,您可能会通过gdb看到"cl"
的值在lv
之后变为0
,然后才能正确设置到getline
语句中的3
,然后保留用于后续循环,无论你输入什么。
此外,如果您将声明更改为if
,则预期的行为会出现(static int lv = 1;
保持lv
直到'手动'更改为止。
有人可以告诉我到底是怎么回事?
1
答案 0 :(得分:9)
合理的解释是,您的平台function pulseEff() {
$('.DivBorder').delay(1000)
.animate({
'border-color': 'transparent'
}, 600).delay(1000)
.animate({
'border-color': '#333'
}, 600);
};
var Interval;
$('#start').click(function () {
Interval = setInterval(pulseEff, 600);
});
大于size_t
。
如果是这种情况,则代码中包含UB,int
更新lv
时getline
变量会被覆盖。
只需将len
声明为len
。
答案 1 :(得分:0)
编译器列出的一个问题是getline()(在Linux上)不是stdio.h中的原型,除非这样编写:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
编译器还提出了另外两个关于未使用参数的警告&#39; argc&#39;和&#39; argv&#39;建议将主要功能声明更改为:
int main( void )