MD5 хэш строки, которая уже хэширована md5: синтаксическая ошибка - PullRequest
0 голосов
/ 21 мая 2019

Я хотел сгенерировать хеш 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;     

}

1 Ответ

1 голос
/ 21 мая 2019

Ваша проблема связана с fgets, который поддерживает перевод строки в буфере чтения.

От человека 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';

   ...
...