Problem z przypisaniem stringa do char[]

0

Witam.

Mam funkcję, która pobiera strone internetową do pliku :

void wwwToFile(char * wwwAdres, char * fileName)  {
 
    static const char *pagefilename = fileName;
    FILE *pagefile;
    CURL *curl_handle;

    curl_global_init(CURL_GLOBAL_ALL);
    curl_handle = curl_easy_init(); /* init the curl session */
    curl_easy_setopt(curl_handle, CURLOPT_URL, wwwAdres); /* set URL to get here */
    curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data_toFile);  /* send all data to this function  */
 
    pagefile = fopen(pagefilename, "wb"); /* open the file */
    if (pagefile) {
      curl_easy_setopt(curl_handle, CURLOPT_FILE, pagefile); /* write the page body to this file handle. CURLOPT_FILE is also known as
        CURLOPT_WRITEDATA*/
      curl_easy_perform(curl_handle); /* get it! */
      fclose(pagefile); /* close the header file */
    } 
    curl_easy_cleanup(curl_handle);        /* cleanup curl stuff */
} 

Chciałbym ją wywołac w ten sposób :

struct wwwDownload{
	std::string bankName;
	std::string wwwAdres;
	std::string fileName;
}; 
 

int main(void) {

	wwwDownload www[2] = {
		{"NBP","http://nbp.pl/kursy/kursyc.html","NBP.txt"},
		{"WBK","http://indywidualni.bzwbk.pl/przewodniki/kursy-walut/kursy-walut-bank-zachodni-wbk-przewodnik.html","WBK.txt"},
	};
	
//Tak było wczesniej ->	char adres[] = "http://nbp.pl/kursy/kursyc.html";
//                          ->	char nazwa_pliku[] = "strona.txt";

        char adres[] = www[0].wwwAdres;       // <- A tak bym chciał wywołać teraz
        char nazwa_pliku[] = www[0].fileName; // <-

	wwwToFile (adres, nazwa_pliku);

Ale nie moge przypisać stringa do char[] , jak to ominąć ?
probowalem tez

char nazwa_pliku[] = www[0].fileName.c_str

Ale tez nie przechodzi. Może ktoś pomóc ?

0

strcpy

Ewentualnie możesz przekazać tej funkcji bezpośrednio wskaźnik do tego napisu, tj. wywołanie c_str(). Jeżeli w trakcie wywołania tej metody napis nie zmieni się to wszystko będzie działać w porządku.

0

Chodzi ci o takie wywołanie funkcji? :

 wwwToFile (www[0].wwwAdres.c_str(), nazwa_pliku);

Bo wtedy wyrzuca mi błąd :
Error 1 error C2664: 'wwwToFile' : cannot convert parameter 1 from 'const char *' to 'char *'

0

Dołóż const do obu wskaźników w deklaracji twojej funkcji.

0

Dzieki za pomoc , działa po dodaniu const :)

void wwwToFile(const char* adres, const char * nazwa_pliku); 
 wwwToFile (www[0].wwwAdres.c_str(), www[0].fileName.c_str());
0

Mam jeszcze mały problem, ponieważ chciałem zapisać 2 strony pod rząd za pomocą kodu:

int main(void) {
	const int size_www_download = 2;
	wwwDownload www[size_www_download] = {
		{"NBP","http://nbp.pl/kursy/kursyc.html","NBP.txt"},
		{"WBK","http://indywidualni.bzwbk.pl/przewodniki/kursy-walut/kursy-walut-bank-zachodni-wbk-przewodnik.html","WBK.txt"}
	};
	for (int i=0 ; i < size_www_download ; ++i){
	wwwToFile (www[i].wwwAdres.c_str(), www[i].fileName.c_str());
	};
//  downloadEuro();
  getchar();
} 

Ale niestety po zakonczeniu dzialania programu istnieje tylko jeden plik "NBP.txt" i jest do niego zapisana druga strona czyli "http://indywidualni.bzwbk.pl/przewodniki/kursy-walut/kursy-walut-bank-zachodni-wbk-przewodnik.htm" , a wiec wychodzi na to ze najpierw przy pierwszej petli zapisuje mi normalnie strone NBP do pliku "NBP.txt", nastepnie przy drugim okrążeniu zapisuje mi strone WBK, ale niestety też do tego samego pliku czyli "NBP.txt" a ja chciałem żeby zapisało mi do "WBK.txt".
Dlaczego nie tworzy mi drugiego pliku ?

0

static const char *pagefilename = fileName;
wywal static.

0

Działa.
Wielkie dzieki za pomoc.

0

Tak a propos zastanawiam się czemu nie zrobisz tak:

struct wwwDownload
  {
   const char *bankName,*wwwAdres,*fileName;
  };

const wwwDownload www[]=
  {
   {"NBP","http://nbp.pl/kursy/kursyc.html","NBP.txt"},
   {"WBK","http://indywidualni.bzwbk.pl/przewodniki/kursy-walut/kursy-walut-bank-zachodni-wbk-przewodnik.html","WBK.txt"},
  };
const unsigned size_www_download=sizeof(www)/sizeof(*www); // samo się wyliczy

Wtedy nie masz problemów ze stringami.

0

Rzeczywiscie masz racje, o wiele lepiej to wyglada.
Dzieki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1