C sprintf函数中的问题
我正在为rar密码破解程序编码。我正在从文件中读取密码并将其传递给sprintf函数。这是代码C sprintf函数中的问题,c,file,C,File,我正在为rar密码破解程序编码。我正在从文件中读取密码并将其传递给sprintf函数。这是代码 FILE* fp = fopen("password.txt","r"); while ( fgets ( pword, sizeof(pword), fp ) != NULL ) { sprintf(command, "rar e -p%s realp.rar", pword); printf(command); //sys
FILE* fp = fopen("password.txt","r");
while ( fgets ( pword, sizeof(pword), fp ) != NULL )
{
sprintf(command, "rar e -p%s realp.rar", pword);
printf(command);
//system(command);
}
这段代码看起来不错,但不起作用。因此,我对系统功能进行了注释,并打印了变量“command”。输出如下:
rar e -pfirstpassword
realp.rarrar e -psecondpassword
realp.rarrar e -pthirdpassword
realp.rarrar e -pfourthpassword realp.rar
我看到它坏了。输出应该是这样的
rar e -pfirstpassword realp.rar
rar e -psecondpassword realp.rar
rar e -pthirdpassword realp.rar
rar e -pfourthpassword realp.rar
有人能帮我解决这个问题吗?提前谢谢
- 操作系统:Windows7
- 编译器:devc++
每次通过while循环时,pword后面都跟着一行新行。 因此,输出:
rar e -pfirstpassword [NEWLINE]
realp.rar
[command1][command2][command3]
不能以新行结束命令。
因此,输出:
rar e -pfirstpassword [NEWLINE]
realp.rar
[command1][command2][command3]
结合这两个问题(在得到的每个循环迭代周围添加大括号):
{rar e -pfirstPassword [NEWLINE]
realp.rar}{rar e -psecondPassword [NEWLINE]
realp.rar}
要解决此问题,请从每个密码行的末尾删除新行
要扩展: 适用于windows的fgets文档可在以下位置获得: 从文件中: fgets函数从中读取字符串 输入流参数和存储 它在str.fgets中读取 到和的当前流位置 包括第一个换行符, 到溪流的尽头,或直到 读取的字符数等于 n–1,以先到者为准 存储在str中的结果附加了 空字符。换行符 字符(如果已读取)包含在 绳子
新行字符因此被包含为写入pWord的字符串的一部分。当您不删除该字符时,在用PrTrF编写命令时在命令的中间有换行符。
不工作不是一个非常精确的问题描述。我格式化输出。对不起,不便。这仍然不能回答我的问题。什么是问题?当你使用系统
命令时不工作?你是否收到错误消息,你的程序/计算机是否崩溃,苹果是否开始从天而降?…文件的内容是什么?我想,我没有正确解释问题。此代码应该提取rar文件,但它没有提取。相反,它打开了所有选项谢谢你的帮助,但我不明白。你能详细说明一下吗。意思是我必须修改包含密码的文件吗?我不能这样做,因为我编写的代码生成了所有可能的单词组合,打印了新行中的所有字符串。我可以更改,但我认为这不是一个好主意。我可以更改它吗s编码并解决问题??是的,如上面的答案所示,您所要做的就是从字符串中删除换行符。显示的代码片段。--pword[strlen(pword)-1]='\0';--将以一种简单的方式执行此操作。