Portál AbcLinuxu, 12. května 2025 06:54

Dotaz: c++ - CLI parameter z argv a strcat

28.10.2010 16:20 PeterS. | skóre: 10
c++ - CLI parameter z argv a strcat
Přečteno: 433×
Odpovědět | Admin

Ahoj

potrebujem dostať parameter programu, odovzdať ho funkcii a spojiť ho s iným stringom. Je to vlastne názov pôvodného súboru ku ktorému sa ma pripojiť koncovka a pod týmto menom sa ma uložiť nový obrázok.

Mám toto:

int main(int argc, char** argv)
{
int poc_obr=argc-1;
char* filename;
for (n=0;n<poc_obr;n++) {

//opening image
filename = argv[n+1];
CImg<unsigned char> srcimg(filename) ;   // toto funguje


savemask (,,,*filename);            // tu ten názov predávam
}
}


void savemask (,,,char filename) {

char finalname[20];                          // finalny nazov obrazka
strcat(finalname,  const char* filename);    // =riadok 124
strcat(finalname, "_mask.jpg");


mask_img.save(finalname);
}

kompilacia:
cphix-0h.cpp: In function ‘void savemask(mydata&, int*, int, char)’:
cphix-0h.cpp:124: error: expected primary-expression before ‘const’

 

Hľadal som už aj na nete, skušal som už veľa možností, ale zjavne mi chýba hlbšie pochopenie...

Vďaka za pomoc...

 

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.10.2010 17:39 mato
Rozbalit Rozbalit vše Re: c++ - CLI parameter z argv a strcat
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příloha:
hm, dost nebezpecne slepo kopirovat user data bez osetrenia (filename[20] ako buffer).
prilozil som subor ako by som to robil ja (opat moznosti je viac):

mato@foxi:(~/lair/filename)$ ./atest picture picture02
DEBUG: working on picture
DEBUG: new file: picture_mask.jpg

DEBUG: working on picture02
DEBUG: new file: picture02_mask.jpg

mato@foxi:(~/lair/filename)$

osobne by som ti ale odporucil prejst nejaku C/C++ ucebnicu; aspon zbezne
28.10.2010 23:52 PeterS. | skóre: 10
Rozbalit Rozbalit vše Re: c++ - CLI parameter z argv a strcat
Ahoj, študujem tvoj súbor a mám otázku. Nie je jednoduchšie previesť argv[a] na string a tak s nim dalej narábať? Viď:

string filename,newfilename;

while ( a < argc) {

filename =argv[a]; newfilename=filename+"_mask.jpg"; ...... }

Nemam tu teraz ten môj rozpracovaný program, ale urobil som si skúšobný program a funguje to. Aj ked dosť dlho som sa s tým cez den mordoval a nezdá sa mi že som prehliadol takéto triviálne riešenie... Overim to zajtra...
29.10.2010 01:03 mato
Rozbalit Rozbalit vše Re: c++ - CLI parameter z argv a strcat
pravda je, ze ja som ti ukazal C-ckovsky pristup k problemu, C++ ma na to svoje nastroje, ktorymi by sa to dalo spravit - pozri google, najde ti ukazky manipulacie so stringom (string/std::string , etc.)

string ako taky v C nie je definovany a teda neexistuje operator + v takom vyzname, ako si ho pouzil ty

nevidim ti do kodu a problemu co riesis, na tvoju otazku som ti teda odpovedal v C

ale nemyslim si, ze by to bolo nejak zlozite .. i ten operator + v C++ je zadef. tak, ze musi vytvorit space pre novovzniknuty string - niekde sa ta sprava pamati musi udiat .. v C++ ju vsak v tomto pripade nevidis

29.10.2010 07:32 PeterS. | skóre: 10
Rozbalit Rozbalit vše Re: c++ - CLI parameter z argv a strcat

problem je že funkcia ktorú potrebujem:

CImg<unsigned char> srcimg(filename) ;

neberie filename ak je definované ako string, stažuje sa:

/usr/include/CImg.h:6992: note: candidates are: cimg_library::CImg<T>::CImg(const T*, unsigned int, unsigned int, unsigned int, unsigned int, bool) [with T = unsigned char]

preto som filename mal definované ako :

char* filename;

ale potom mám problem to prenášať medzi funkciami. Mne by vyhovovalo narábať s filename ako so stringom, kvôli upravam, ale potom to potrebujem predať CImg<unsigned char>  ako char....

29.10.2010 07:55 PeterS. | skóre: 10
Rozbalit Rozbalit vše Re: c++ - CLI parameter z argv a strcat
Myslim že som to vyriešil:
char *char_filename=new char[filename.size()+1]  ;
char_filename[filename.size()]=0; 		
memcpy(char_filename,filename.c_str(),filename.size()); 
Tak ako som to popísal výššie, pre CImg to budem konvertovať na char a inak to bude string.

Teda tu konverziu som samozrejme našiel na nete. V každom prípade vďaka za pomoc...
29.10.2010 11:04 ludo
Rozbalit Rozbalit vše Re: c++ - CLI parameter z argv a strcat
konvertovat medzi stringom a char* nemusis... string je jenom obal nad char* polom, ktory sa stara o alokaciu a pridava bezne operatory a funkcie... k polu ktore potrebujes mozes pristupovat cez .c_str() ako to tam aj mas, ale kopirovat ho nemusis...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.