【问题标题】:C - Writing key from kbhit to a file crashes the programC - 将密钥从 kbhit 写入文件会使程序崩溃
【发布时间】:2019-01-22 21:11:14
【问题描述】:

key 值写入文件会使程序崩溃。我知道这一点,因为我用key 值替换了正常的String,并且程序运行良好。为什么key 值会导致程序崩溃?

#include <stdio.h>
#include <conio.h>

int main() {

  FILE *fp;
  fp = fopen("C:\\Users\\Francisco\\Documents\\C programs\\log.txt", "w");


  int key;

  while(1) {

    if(_kbhit()) {

     key = _getch();

      fprintf(fp, (const char*) key);

    }

  }

  fclose(fp);

  return 0;

}

【问题讨论】:

  • fprintf(fp, (const char*) key); 中,您没有提供格式字符串。是时候阅读printf 系列函数的手册页了吗?强制转换可能会导致编译器警告失效,但 int 仍将被视为要取消引用的地址。
  • 为什么要将 char(int 形式)转换为 char*?
  • fputc(key, fp); 也就是说,这个循环很糟糕。它基本上是在旋转 CPU 等待按键检测。

标签: c keylogger


【解决方案1】:
  fprintf(fp, (const char*) key);

应该是

  fprintf(fp,"%c ",key);

【讨论】:

  • 您应该提供的 fprintf 语法。 fprintf(文件、格式​​和变量)在我的示例中,文件是 fp,格式是“%c”,它是字符格式,然后是变量键
  • 值得指出的是,您正在为格式说明符传递 int,该格式说明符期望通过 char 类型。它起作用的原因是,char 变量如果通过,将被提升为int,因此直接传递int 确实有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
相关资源
最近更新 更多