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

93,020 zapytań

141,985 odpowiedzi

321,284 komentarzy

62,366 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...