Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C sprintf函数中的问题_C_File - Fatal编程技术网

C 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

我正在为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);                                               
    }
这段代码看起来不错,但不起作用。因此,我对系统功能进行了注释,并打印了变量“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++
fgets()找到的换行符保存在“pword”中。删除它,然后改为用a\n打印每一行,然后查看它是否有效

有关详细信息,请参阅手册页

尝试在fgets()调用后添加以下行


每次通过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';--将以一种简单的方式执行此操作。