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

Odczyt z pliku txt, konwersja string/char

Object Storage Arubacloud
0 głosów
1,309 wizyt
pytanie zadane 12 kwietnia 2016 w C i C++ przez Barus Stary wyjadacz (14,120 p.)

Witam! 

Mam problem z odczytem z pliku txt, a konkretnie z funkcją, która przekonwertuje typ string na char. W pliku tekstowym są 2 linie zapisane w tym samym programie jako char. Oto krótki kawałek programu :

switch(nr_lini)
        {
            case 1: passw1=strdup(linia.c_str()); break;
            case 2: passw2=strdup(linia.c_str()); break;
        }
        

Na różnych forach znalazłem funkcję strdup() tylko problem w tym, że kiedy próbuję odpalić program wywala mi błąd " invalid conversion froz 'char*' to 'char' ". Nie do końca wiem co mam z tym zrobić. Proszę uprzejmie o pomoc.

Pozdrawiam! 

  

1 odpowiedź

+1 głos
odpowiedź 12 kwietnia 2016 przez bumpMind Gaduła (4,260 p.)
wybrane 12 kwietnia 2016 przez Barus
 
Najlepsza
Jakiego typu są zmienne passw1 i passw2?
komentarz 12 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)
Dziękuję za odpowiedź. Te zmienne są typu char. Tylko że zapis do pliku txt powstaje w taki sposób, że każda kolejna literka to tablica char (literka pierwsza - char[0], literka druga - char[1] itd..).
komentarz 12 kwietnia 2016 przez bumpMind Gaduła (4,260 p.)
edycja 12 kwietnia 2016 przez bumpMind

Tutaj właśnie leży problem, zgodnie z dokumentacją funkcja strdup zwraca wynik w postaci char* zatem nie możesz zapisać go do zmiennej typu char. Czyli nie możesz zapisać wyniku  do zmiennej jednego znaku (char) ale do tablicy znaków jakim jest char*. Żeby to naprawić zmień typ passw1 i passw2 na char* a jeśli nie do końca rozumiesz pojęcie wskaźników to polecam doczytać w tym temacie ;) ale uogólniając zmieniając to co napisałem zapiszesz pod daną zmienną wskaźnik na tablicę znaków zwróconych przez strdup (czyli cały string ze zmiennej linia).

komentarz 12 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)
Kiedy zmieniam typ danych na char* dalej wywala ten sam błąd, ale pomyślałem, że może zaalokowanie pamięci tablicy znaków pomoże. Co Ty na to ? :)
komentarz 12 kwietnia 2016 przez bumpMind Gaduła (4,260 p.)
Mógłbyś podesłać większą ilość kodu, włącznie z deklaracją zmiennych? Np na jakiś serwis hostujący, spróbuję Ci pomóc :)
komentarz 12 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)

Mogę przesłać nawet tutaj bo kodu w programie głównym jak na razie nie jest dużo :)

int main()
{

    char c;
    char* passw1, passw2; 
    int i=0, nr_lini;
    string linia;

    fstream plik;
    plik.open("haslo.txt", ios::in);

    if(plik.good()==false)
    {
        string napis;

        cout<<"Nie ustalono hasla dla admina i usera. Chcesz ustawic haslo teraz? (Y/N)"<<endl;
        cin>>napis;

        transform(napis.begin(), napis.end(), napis.begin(),::toupper);

        if(napis=="Y")
        {
            system("cls");
            adpassw(); //funkcja do tworzenia hasla
        }

        else if(napis=="N")
        {
            system("cls");
            cout<<"Nie mozna kontynulowac.";

            getchar();getchar();
            exit(0);
        }

        else
        {
            system("cls");
            cout<<"Error.";

            getchar();getchar();
            system("cls");
            main();
        }
    }

    while(getline(plik,linia))
    {
        switch(nr_lini)
        {
            case 1: passw1=strdup(linia.c_str()); break;
            case 2: passw2=strdup(linia.c_str()); break;
        }

        nr_lini++;
    }

    plik.close();
	
return 0;	
}

Jak na razie doszedłem do plik.close(); reszta mojego pomysłu jest już łatwa tylko nie wiem jak odczytać te linie z pliku.

komentarz 12 kwietnia 2016 przez bumpMind Gaduła (4,260 p.)
Ok problem leży w tej linijce: char* passw1, *passw2; brakowało * przed passw2, trzeba ją stawiać zawsze przed każdą nazwą zmiennej która ma być wskaźnikiem, powodzenia z resztą programu ;)
komentarz 12 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)
Zrobiłem już tak wcześniej, ale kiedy zadeklaruje te zmienne jako wskaźniki program się uruchamia, ale od razu jest komunikat, że program przestał działać.
komentarz 12 kwietnia 2016 przez bumpMind Gaduła (4,260 p.)
Dziwne zmieniłem to w kodzie który podrzuciłeś i nie wywaliło, zgaduje że masz już jakiś gotowy plik txt z którego odczytujesz to tak?
komentarz 12 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)
Tak, dokładnie :)
komentarz 12 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)
O Boże jaki ja jestem głupi... :D Już wszystko działa! okazało się, że zapomniałem zmiennej "nr_lini" przypisać 1... :) Dziękuję Ci bardzo za pomoc i stracony na mnie czas! :)

Pozdrawiam!

Podobne pytania

0 głosów
2 odpowiedzi 848 wizyt
0 głosów
3 odpowiedzi 1,638 wizyt
pytanie zadane 14 października 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)
0 głosów
1 odpowiedź 6,912 wizyt
pytanie zadane 24 czerwca 2016 w C i C++ przez MasterFlamaster Początkujący (300 p.)

92,583 zapytań

141,434 odpowiedzi

319,668 komentarzy

61,966 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!

...