繁体   English   中英

已对md5进行哈希处理的字符串的MD5哈希:语法错误

[英]MD5 hash of a string which is already md5 hashed: Syntax error

我想生成已经被md5哈希的字符串的md5哈希。 这就是我所做的! 我已经循环了,但是不幸的是,它显示了一些错误“ sh:2:语法错误:“ |”意外”。 我希望它与循环内的“ strcat”有关。 在回路中以某种方式

strcpy(command,"echo ");
strcat(command,str);

被忽略。 我在这里迷路了!

有人可以帮我吗?

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
   FILE *fp;
   char str[100], command[100];
   char var[100];
   int i;
   printf("Enter the string:\n");
   scanf("%[^\n]s",str);
   printf("\nString is: %s\n\n",str);
   for (i=0; i<3; i++) {
       strcpy(command,"echo ");
       strcat(command,str);
       strcat(command," | md5sum");
       strcat(command," | cut -c1-32");
       fp = popen(command, "r");
       fgets(var, sizeof(var), fp);
       pclose(fp);
       strcpy(str,var);
   }
   printf("The md5 has is :\n");
   printf("%s\n", var);   
   return 0;     

}

你的问题来自于fgets其保持换行符上读取缓冲区。

从老兄那里:

fgets()最多从流中读取小于大小的字符,并将它们存储到s所指向的缓冲区中。 在EOF或换行符之后停止读取。 如果读取了换行符,则将其存储在buffer中 终止的空字节( \\0 )存储在缓冲区中的最后一个字符之后。

因此,您可能希望将\\n替换为\\0 您可以使用strcspn来做到这strcspn

   ...           
   fgets(var, sizeof(var), fp);
   pclose(fp);
   strcpy(str,var);

   /* remove first \n in str*/
   str[strcspn(str, "\n")] = '\0';

   ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM