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

Argv, konwertowanie char* do char

Object Storage Arubacloud
0 głosów
507 wizyt
pytanie zadane 18 kwietnia 2019 w C i C++ przez plotrekpl Nowicjusz (190 p.)
edycja 18 kwietnia 2019 przez plotrekpl

Oto mój fragment kodu, chcę przy wywołaniu programu, jak jeden z argumentów podać znak, i nie wiem jak to zrobić, jest jakaś funkcja która to konwertuje?    

char wybor2;
argv[4]=wybor2;

error: invalid conversion from 'char' to 'char*' [-fpermissive]

1 odpowiedź

0 głosów
odpowiedź 18 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)
wybrane 18 kwietnia 2019 przez plotrekpl
 
Najlepsza
Pokaż cały kod.
komentarz 18 kwietnia 2019 przez plotrekpl Nowicjusz (190 p.)

chodzi tylko o to

char wybor2;
arrgv[4]=wybor2;

 

komentarz 18 kwietnia 2019 przez plotrekpl Nowicjusz (190 p.)

Jeśli chodzi o kod to tak:

int main(int argc, char *argv[])
{
	if(argc!=5){
		cout<<"Zla ilosc argumentow"<<endl;
		cout<<"Podaj ./nazwa, plik_odczytu.txt, plik_zapisu.txt"<<endl;
		return -1;
	}
	
	ifstream plik;
	ofstream zapis;
	int n=0;
	
	string *napisy=NULL;
	
	plik.open(argv[1]);
	if(plik.good()==false){
		cout<<"Bledny plik!"<<endl;
		exit(-1);
	}
	napisy=wczytaj(plik,n);
	plik.close();
	
	zapis.open(argv[2]);
	string wybor;
	wybor=(argv[3]);
	
	char wybor2;
	argv[4]=wybor2;
	zapisz(zapis,napisy,n, wybor, wybor2);
	zapis.close();
	if(napisy!=NULL)
	delete []napisy;
	napisy=NULL;
	
	
	
	
	return 0;
}

 

komentarz 18 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)

Zmienna wybor2 jest typu char co oznacza, że to jest jeden znak.

Zaś zmienna argv jest typu char**, czyli wskaźnik na char*, czyli string.

Czyli argv to tablica string'ów.

argv[4] oznacza piąty string w tablicy, a ty próbujesz przypisać char, czyli jeden znak czego nie możesz zrobić.

Zamień:

char wybor2;

na:

string wybor2;

Tylko nie za bardzo rozumiem co próbujesz zrobić w tym kodzie, ponieważ od razu po deklaracji zmiennej wybor2 nie ma tam nic, czyli w argv[4] też niczego nie będzie.

komentarz 18 kwietnia 2019 przez plotrekpl Nowicjusz (190 p.)

wiem że tak mogę zrobić, tylko zastanawiam się czy można to jakoś konwertować

jak np:

int wybor;
wybor=atoi(agrv[4]);

 

komentarz 18 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)
W taki sposób jak pokazałeś w przykładzie możesz to zrobić, ale zależy co chcesz osiągnąć tym kodem. Napisz co próbujesz osiągnąć to łatwiej będzie pomóc.
komentarz 18 kwietnia 2019 przez plotrekpl Nowicjusz (190 p.)
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

using namespace std;

string *wczytaj(ifstream &plik, int &n){
    string linia;
    getline(plik, linia);
    n=atoi(linia.c_str());

    string* t= new string [n];
    for(int i=0; i<n; i++)
        getline(plik,t[i]);
    return t;
}

void  zapisz(ofstream &z, string*t, const int n,string wybor, string wybor2){
        string zmienna;
        for(int i=0; i<n ;i++)
        if(t[i].find(wybor)!=string::npos)
            zmienna=t[i];
        if(zmienna.find(wybor2)!=string::npos)
            z<<zmienna;
}
int main(int argc, char *argv[])
{
    if(argc!=5){
        cout<<"Zla ilosc argumentow"<<endl;
        cout<<"Podaj ./nazwa, plik_odczytu.txt, plik_zapisu.txt"<<endl;
        return -1;
    }
    
    ifstream plik;
    ofstream zapis;
    int n=0;
    
    string *napisy=NULL;
    
    plik.open(argv[1]);
    if(plik.good()==false){
        cout<<"Bledny plik!"<<endl;
        exit(-1);
    }

    napisy=wczytaj(plik,n);
    plik.close();
    
    zapis.open(argv[2]);
    string wybor;
    wybor=(argv[3]);
    
    string wybor2;
	wybor2=(argv[4]);

    zapisz(zapis,napisy,n, wybor, wybor2);
    zapis.close();
    
    if(napisy!=NULL)
    delete []napisy;
    napisy=NULL;
    
    
    
    
    return 0;
}

ze stringiem działa ale z charem już nie :/ 

komentarz 18 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)

No to zostaw string'a.

Podobne pytania

0 głosów
2 odpowiedzi 239 wizyt
pytanie zadane 27 grudnia 2016 w C i C++ przez programmero Bywalec (2,420 p.)
0 głosów
3 odpowiedzi 49,809 wizyt
pytanie zadane 29 listopada 2016 w C i C++ przez TheBatman94 Początkujący (450 p.)
–1 głos
1 odpowiedź 1,257 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...