• 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ą

Object Storage Arubacloud
0 głosów
252 wizyt
pytanie zadane 17 listopada 2020 w C i C++ przez Marak123 Stary wyjadacz (11,190 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 Dyskutant (8,250 p.)
char* i string to co innego
komentarz 17 listopada 2020 przez Marak123 Stary wyjadacz (11,190 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 Dyskutant (8,250 p.)
zahashować to znaczy co zrobić?
komentarz 17 listopada 2020 przez Marak123 Stary wyjadacz (11,190 p.)
w neta se wpisz co to jest hashowanie
komentarz 17 listopada 2020 przez Daaa22 Dyskutant (8,250 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 (344,840 p.)
...najpierw się dowiedz co to hashowanie, a potem próbuj dawać rady.
komentarz 17 listopada 2020 przez Daaa22 Dyskutant (8,250 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 (344,840 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 Dyskutant (8,250 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 (344,840 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 (344,840 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 Stary wyjadacz (11,190 p.)
No to mówię. Chcę hashowanie MD5
komentarz 17 listopada 2020 przez adrian17 Ekspert (344,840 p.)

No ok, wyżej odpowiedziałem

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

komentarz 17 listopada 2020 przez Marak123 Stary wyjadacz (11,190 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 (344,840 p.)
No, tak ze stringa dostaniesz wskaźnik na jego tekst.
komentarz 18 listopada 2020 przez Marak123 Stary wyjadacz (11,190 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 147 wizyt
pytanie zadane 19 listopada 2018 w Inne języki przez ArturoS159 Początkujący (440 p.)
0 głosów
0 odpowiedzi 194 wizyt
pytanie zadane 13 lipca 2017 w Systemy operacyjne, programy przez pako Nowicjusz (140 p.)
0 głosów
1 odpowiedź 153 wizyt
pytanie zadane 10 kwietnia 2016 w C i C++ przez T.Żurawski Początkujący (290 p.)

92,536 zapytań

141,376 odpowiedzi

319,451 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...