我想生成已被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;
}
答案 0 :(得分:1)
您的问题来自fgets
,该行将换行符保留在读取缓冲区中。
来自老兄:
fgets()从流中读取最多小于大小的字符,并将其存储到s指向的缓冲区中。在EOF或换行符之后停止读取。 如果读取换行符,它将存储在缓冲区中。终止空字节(
\0
)存储在缓冲区的最后一个字符之后。
因此,您可能希望将\n
替换为某些\0
。您可以使用strcspn
:
...
fgets(var, sizeof(var), fp);
pclose(fp);
strcpy(str,var);
/* remove first \n in str*/
str[strcspn(str, "\n")] = '\0';
...