fgets() 在扫描包含 % 符号的行时很奇怪
fgets() is being weird when scanning lines that contain a % symbol
这是学校项目的一部分,所以我不能向任何人展示我的代码,但足以说明,我的项目必须读取、复制和编辑自己的源代码(因为我们正在研究多态恶意软件).我正在使用 fgets() 来读取每一行代码,但是每当我有一行带有模运算或格式字符串的代码时,% 符号和它后面的任何非空白字符都会丢失。我猜测 fgets() 正在将 % 符号视为格式字符串,那么我该如何告诉它不要那样做呢?
Post 答案编辑:
我正在发布一行代码来演示哪里出了问题。
这就是我从文件中获取字符串的方式:
fgets(line, 128, src_file);
这就是我将该字符串写入新文件的方式(这是错误的)
fprintf(out_file, line);
您对 fprintf(out_file, line)
的调用是错误的。
当line
包含%
字符时,fprintf()
会将其解释为格式说明符,这不是您想要的。
您应该改为 fprintf(out_file, "%s", line)
。
如果您只需要将字符串写入文件,您最好使用 fputs()
:
fputs(line, out_file);
这是学校项目的一部分,所以我不能向任何人展示我的代码,但足以说明,我的项目必须读取、复制和编辑自己的源代码(因为我们正在研究多态恶意软件).我正在使用 fgets() 来读取每一行代码,但是每当我有一行带有模运算或格式字符串的代码时,% 符号和它后面的任何非空白字符都会丢失。我猜测 fgets() 正在将 % 符号视为格式字符串,那么我该如何告诉它不要那样做呢?
Post 答案编辑: 我正在发布一行代码来演示哪里出了问题。 这就是我从文件中获取字符串的方式:
fgets(line, 128, src_file);
这就是我将该字符串写入新文件的方式(这是错误的)
fprintf(out_file, line);
您对 fprintf(out_file, line)
的调用是错误的。
当line
包含%
字符时,fprintf()
会将其解释为格式说明符,这不是您想要的。
您应该改为 fprintf(out_file, "%s", line)
。
如果您只需要将字符串写入文件,您最好使用 fputs()
:
fputs(line, out_file);