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

VPS Starter Arubacloud
0 głosów
250 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,100 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,100 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,100 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,100 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 właśnie też używałem ale wyskakiwał taki błąd

error: invalid conversion from 'const char*' to 'char*' [-fpermissive]|
komentarz 17 listopada 2020 przez Whistleroosh Maniak (56,900 p.)

W internecie były już poruszane te tematy: https://stackoverflow.com/questions/7352099/stdstring-to-char

komentarz 17 listopada 2020 przez adrian17 Ekspert (344,100 p.)
No to .data() lub &tekst[0].

Natomiast nie wiem skąd wziąłeś tą funkcję do hashowania (i czemu nie chcesz używać wbudowanej w język), ale jest badziewna - nie ma żadnego powodu, by hashowanie potrzebowało wskaźnik na mutowalny tekst.
komentarz 17 listopada 2020 przez Marak123 Stary wyjadacz (11,190 p.)
Tylko ze to co dałeś to jest innym błąd a nie ten co ja mam ja mam const char* to char a nie string to char
komentarz 17 listopada 2020 przez Marak123 Stary wyjadacz (11,190 p.)

@adrian17, A jest jakaś wbudowana 

komentarz 17 listopada 2020 przez adrian17 Ekspert (344,100 p.)
No... jest, std::hash.
komentarz 17 listopada 2020 przez Marak123 Stary wyjadacz (11,190 p.)
ale to chyba nie jest hashowanie md5??
komentarz 17 listopada 2020 przez adrian17 Ekspert (344,100 p.)
Nie, trzeba było powiedzieć że chcesz MD5 ;)

To przepraszam.
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,100 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,100 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 143 wizyt
pytanie zadane 19 listopada 2018 w Inne języki przez ArturoS159 Początkujący (440 p.)
0 głosów
0 odpowiedzi 191 wizyt
pytanie zadane 13 lipca 2017 w Systemy operacyjne, programy przez pako Nowicjusz (140 p.)
0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 10 kwietnia 2016 w C i C++ przez T.Żurawski Początkujący (290 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...