Как согласовать значения цикла в переменную для возврата в C - PullRequest
0 голосов
/ 04 марта 2019

У меня маленькая проблема с этим.Что мне нужно сделать, это создать функцию, которая возвращает строку (получение другой строки в качестве параметра).Эта функция должна генерировать шифрование (sha256) из ввода.Это мой ужасный код, и я объясню (или постараюсь)

#include <stdlib.h>
#include <stdio.h>        
#include <string.h>                                                     

//not sure if this is the correct way to declare a string function 
//with string input parameter, but works with a dummy return
const char* Encrypt (char* Arg1)                                                                     
{  
    //varaible to generate command 
    char command[128];
    //variable to store the result
    char result[256];
    //creating command with input parameter
    snprintf(command, sizeof command, "echo -n %s | sha256sum | cut -c1-64",Arg1);  

    //popen varaible
    FILE *fpipe;
    //valdiating popen
    if (0 == (fpipe = (FILE*)popen(command, "r")))
    {
        perror("popen() failed.");
        exit(1);
    }

    //here is my problem
    char c = 0;
    while (fread(&c, sizeof c, 1, fpipe))
    {
        //when i print te "c", it shows correctly in a line
        printf("%c", c);
        //but I want to store in "result" variable for using as return

        //this doesnt work
        snprintf(result, sizeof result, "%s", c);   

        //this neither
        char c2[4];
        strcpy(c2, &c);
        strcat(result,c2);
        snprintf(result, sizeof result, "%s",c);    
    }

    printf("%c", result);

    pclose(fpipe);
    //return result; not working
    return "not woring";
}  

Надеюсь, вы поможете мне

1 Ответ

0 голосов
/ 04 марта 2019

хорошо, если это то, что вы хотите сделать, просто добавьте его в строку в виде массива:

char c = 0;
resultindex = 0;
while (fread(&c, sizeof c, 1, fpipe))
{
    //when i print te "c", it shows correctly in a line
    printf("%c", c);
    //but I want to store in "result" variable for using as return

    result[resultindex] = c;
    resultindex++;
}
result[resultindex] = 0;
printf("%s", result);

Я не проверял - возможно, есть ошибки

Кроме того, вы действительно должны проверить и убедиться, что результат index никогда не становится больше 256

...