首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sprintf函数问题

sprintf函数问题
EN

Stack Overflow用户
提问于 2010-08-29 13:17:30
回答 2查看 411关注 0票数 4

我在为rar密码破解器编码。我正在读取文件中的密码,并将其传递给sprintf函数。这是密码。

代码语言:javascript
运行
复制
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);                                               
    }

这段代码看上去很好,但不起作用。因此,我对系统功能进行了注释,并打印变量“命令”。输出如下:

代码语言:javascript
运行
复制
rar e -pfirstpassword
     realp.rarrar e -psecondpassword
     realp.rarrar e -pthirdpassword
     realp.rarrar e -pfourthpassword realp.rar

我可以看到它的breaking.The输出应该是这样的。

代码语言:javascript
运行
复制
rar e -pfirstpassword realp.rar
rar e -psecondpassword realp.rar
rar e -pthirdpassword realp.rar
rar e -pfourthpassword realp.rar

有人能帮我解决这个问题吗?提前谢谢。

  • 操作系统: windows 7
  • 编译器: dev c++
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-29 13:25:53

fgets()找到的换行符保留在'pword‘中。移除它,然后用\n代替打印每一行,并查看它是否有效。

请参阅fgets()的手册页。

尝试在fget()调用之后添加以下行。

代码语言:javascript
运行
复制
pword[strlen(pword) - 1] = '\0';
票数 2
EN

Stack Overflow用户

发布于 2010-08-29 13:33:05

您的pword每次遍历while循环后都会有一个新行。因此,产出:

代码语言:javascript
运行
复制
rar e -pfirstpassword [NEWLINE]
     realp.rar

不要用新行结束命令。因此,产出:

代码语言:javascript
运行
复制
[command1][command2][command3]

结合这两个问题(在每次循环迭代中添加大括号):

代码语言:javascript
运行
复制
{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编写它时,命令中间有一个换行符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3594891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档