【问题标题】:C Programming The program result is changed by time(&start) function of <time.h>C编程 程序结果由<time.h>的time(&start)函数改变
【发布时间】:2012-01-19 23:16:29
【问题描述】:

最近我的C程序遇到了非常奇怪的情况。 通常我的程序运行良好,但如果我只添加几行来检查经过的时间,结果就会改变。

结果改变的代码是:

while (!feof(pfInputFile) && (c = fgetc(pfInputFile)) != EOF){
    for(i = 1 ; i < SEED_SIZE ; i++){
    pcSeq[i-1] = pcSeq[i];  // Shift left all sequence
    }
    pcSeq[SEED_SIZE - 1] = c;
}

我添加并导致问题的代码如下:

#include <time.h>

time_t start, end;
time(&start); time(&end);

然后,上面源代码读取的字符就变成了无法识别的字符。

【问题讨论】:

  • 你应该学会使用调试器(比如Linux上的gdb);您应该在启用警告和调试信息的情况下进行编译(即 Linux 上的 gcc -Wall -g);如果您希望我们提供帮助,您应该发布所有代码(错误可能在其他地方)。
  • 如果没有别的,feof 调用毫无意义;只检查((c=getchar())==EOF)
  • 由于您没有显示重现问题的完整最小代码,因此我们只能猜测。特别是,您没有显示pcSeq 是如何定义的,或者它是如何初始化的。您可能会发现调用printf("Hello World\n"); 而不是time() 也会改变输出。

标签: c time time-t time.h


【解决方案1】:

没有足够的细节,但我会大胆猜测。

您返回了一个指向局部变量 pcSeq 的指针。然后在另一个函数中调用time(&amp;start),结果start 变量现在共享与pcSeq 相同的堆栈地址,因此它被覆盖了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2011-09-28
    • 2016-06-26
    • 1970-01-01
    • 2016-07-15
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多