• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed [C++] Problem ze zmienną

Fiszki IT
Fiszki IT
0 głosów
116 wizyt
pytanie zadane 17 listopada 2020 w C i C++ przez Marak123 Dyskutant (9,150 p.)
zamknięte 18 listopada 2020 przez Marak123

Mam problem z funkcja którą zaimplementowałem i normalnie działa tylko ze jak chcę za hashować  tekst ze zmiennej typu string to nie działa bo wyskakuje taki błąd:

error: no matching function for call to 'MD5::digestString(std::__cxx11::string&)'|

a to jest kod który prubóje skompilować:

string slowa = "witam";
cout<<md5.digestString(slowa)<<endl;

Nie wiem jak to naprawić żeby mi hashowało tekst z funkcji ma ktoś pomysł jak to naprawić??

A to jest funkcja którą pobrałem z net do hashowania razem z całą funkcją:

char* digestString(char *string)
    {
        Init();
        Update((unsigned char*)string, strlen(string));
        Final();

        return digestChars;
    }

 

komentarz zamknięcia: dzięki za odpowiedź i pomoc
komentarz 17 listopada 2020 przez Daaa22 Mądrala (7,300 p.)
char* i string to co innego
komentarz 17 listopada 2020 przez Marak123 Dyskutant (9,150 p.)
co ty nie powiesz ja mam zmienna string którą muszę zahashować  tylko ze nie idzie ale tekst wpisany bezpośrednio do tej funkcji działa
komentarz 17 listopada 2020 przez Daaa22 Mądrala (7,300 p.)
zahashować to znaczy co zrobić?
komentarz 17 listopada 2020 przez Marak123 Dyskutant (9,150 p.)
w neta se wpisz co to jest hashowanie
komentarz 17 listopada 2020 przez Daaa22 Mądrala (7,300 p.)

no to ja bym to zrobił tak

char* funkcja( string ciagZnakow )
{
    char* zhashowanyCiagZnakow = new char[ ciagZnakow.size() ];
    for( int i = 0; i < ciagZnakow.size(); i++ )
        zhashowanyCiagZnakow[ i ] = ciagZnakow[ i ];
    return zhashowanyCiagZnakow;
}

 

komentarz 17 listopada 2020 przez adrian17 Ekspert (297,380 p.)
...najpierw się dowiedz co to hashowanie, a potem próbuj dawać rady.
komentarz 17 listopada 2020 przez Daaa22 Mądrala (7,300 p.)

dobra już się doedukowałem, mój błąd. A spróbuj wpisać

char* digestString( string string1 )
{
    char *string2 = new char[ string1.size() ];
    for( int i = 0; i < string1.size(); i++ )
        string2[ i ] = string1[ i ];

    Init();
    Update((unsigned char*)string2, strlen(string2));
    Final();

    return digestChars;
}

 

komentarz 17 listopada 2020 przez adrian17 Ekspert (297,380 p.)
Wciąż bez sensu - po co alokować i kopiować (dwukrotnie?) całego stringa, jak wystarczy przekazać wskaźnik na zawartość tego, co już masz.
komentarz 17 listopada 2020 przez Daaa22 Mądrala (7,300 p.)
moim zdaniem błąd jest w tym że argumentem funkcji jest char* a ty wysyłasz string. Nie sprawdzę ci tego bo jak kompiluje to nie mam zdefiniowanej funkcji Init() i Final(), i w sumie Update() też. Ale jak wpisując ciąg znaków w cudzysłowie działa, to podejrzewam że w konwersji string na char* jest błąd
komentarz 17 listopada 2020 przez adrian17 Ekspert (297,380 p.)

moim zdaniem błąd jest w tym że argumentem funkcji jest char* a ty wysyłasz string

No... tak, to samo mówi kompilator, tak brzmi pytanie :D I niżej daliśmy odpowiedź.

1 odpowiedź

0 głosów
odpowiedź 17 listopada 2020 przez adrian17 Ekspert (297,380 p.)
cout<<md5.digestString(slowa)<<endl;

Próbujesz przekazać std::string do funkcji, która bierze wskaźnik na znaki.

Żeby dostać ze stringa wskaźnik na jego zawartość, użyj .c_str().

komentarz 17 listopada 2020 przez Marak123 Dyskutant (9,150 p.)
No to mówię. Chcę hashowanie MD5
komentarz 17 listopada 2020 przez adrian17 Ekspert (297,380 p.)

No ok, wyżej odpowiedziałem

No to .data() lub &tekst[0].

komentarz 17 listopada 2020 przez Marak123 Dyskutant (9,150 p.)
.data() nie działa bo wyskakuje błąd a czytałem o tym &tekst[0] i za bardzo nie wiem co mi to da
komentarz 17 listopada 2020 przez adrian17 Ekspert (297,380 p.)
No, tak ze stringa dostaniesz wskaźnik na jego tekst.
komentarz 18 listopada 2020 przez Marak123 Dyskutant (9,150 p.)
Kurdę działa nie sądziłem ze zadziała ten &tekst[0] bo wygląda to jak wyciąganie pierwszej litery z tego tekstu ale jednak daje cały tekst dzięki za pomoc

Podobne pytania

0 głosów
0 odpowiedzi 89 wizyt
pytanie zadane 19 listopada 2018 w Inne języki przez ArturoS159 Początkujący (440 p.)
0 głosów
0 odpowiedzi 122 wizyt
pytanie zadane 13 lipca 2017 w Systemy operacyjne, programy przez pako Nowicjusz (140 p.)
0 głosów
1 odpowiedź 95 wizyt
pytanie zadane 10 kwietnia 2016 w C i C++ przez T.Żurawski Początkujący (290 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

84,736 zapytań

133,542 odpowiedzi

295,952 komentarzy

56,001 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...