我在为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);
//system(command);
}这段代码看上去很好,但不起作用。因此,我对系统功能进行了注释,并打印变量“命令”。输出如下:
rar e -pfirstpassword
realp.rarrar e -psecondpassword
realp.rarrar e -pthirdpassword
realp.rarrar e -pfourthpassword realp.rar我可以看到它的breaking.The输出应该是这样的。
rar e -pfirstpassword realp.rar
rar e -psecondpassword realp.rar
rar e -pthirdpassword realp.rar
rar e -pfourthpassword realp.rar有人能帮我解决这个问题吗?提前谢谢。
发布于 2010-08-29 13:25:53
fgets()找到的换行符保留在'pword‘中。移除它,然后用\n代替打印每一行,并查看它是否有效。
请参阅fgets()的手册页。
尝试在fget()调用之后添加以下行。
pword[strlen(pword) - 1] = '\0';发布于 2010-08-29 13:33:05
您的pword每次遍历while循环后都会有一个新行。因此,产出:
rar e -pfirstpassword [NEWLINE]
realp.rar不要用新行结束命令。因此,产出:
[command1][command2][command3]结合这两个问题(在每次循环迭代中添加大括号):
{rar e -pfirstPassword [NEWLINE]
realp.rar}{rar e -psecondPassword [NEWLINE]
realp.rar}来解决这个问题。从每个密码行的末尾删除新行。
要展开: windows的fget文档可以在这里获得:http://msdn.microsoft.com/en-us/library/c37dh6kf(VS.80).aspx
从文件中:
fgets函数从输入流参数中读取字符串,并将其存储在str中。fgets将字符从当前流位置读取到并包括第一个换行符,到流的末尾,或直到读取的字符数等于n- 1为止,以前面的字符为准。存储在str中的结果附加一个空字符。如果读取,换行符将包含在字符串中。
因此,新行字符包含在写到pword的字符串中。由于您没有删除这个字符,所以在用printf编写它时,命令中间有一个换行符。
https://stackoverflow.com/questions/3594891
复制相似问题