|  czus mám problém s funkcí substr() v c++, dělám virtuální linux konzoli pro soutěž u nás ve škole a mám tam následující "architekturu": pro každý trošku důležitější (kořenový) adresář je vyhrazena funkce, např. pro /sbin je vyhrazena funkce void sbin() a ta se volá hned na začátku.. a mám tam blok podmínek pokud se zadá korektní příkaz tak se provede to a to. ale mám problém s příkazy typu rm a cd. když zadám třeba rm kernel tak v pořádku kernel se odstraní protože je tento příkaz v bloku podmínek, když zadám jen rm taky v pořádku ale vyhodí mě to že soubor nebyl nalezen. ale když zadám rm necoconeexistuje tak už mě to hodí chybu, že soubor nebyl nalezen ptže není v podmínkovém bloku. zkoušel jsem použít funkci substr() která přečte dejme tomu v našem případě první dva znaky to rm a podle toho se zachová. zkoušel jsem toto: 
if ( command.find("rm") ) ale dostal jsem znovu ERROR: Command not recognized a pak ještě toto: 
if (command.substring(0,5).equals("rm") { proved vec...() } a to taky nefachalo může někdo poradit jak správně použít tuto funkci v podmínce ? díky 
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 9:32 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  proc si nevypises, co mas v tom commandu? 
nejsem expert na metody stringu, ale substring(0,5).equals("rm") .... nema to byt (0,2) ?? (odpovědět) |  | naked | 81.92.155.* | 30.4.2007 10:14 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  máš pravdu má.. sry má tam být 0,2 
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 10:17 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  a ani s tim to nefunguje? hodil by se kus zdroje :) (odpovědět) |  | naked | 81.92.155.* | 30.4.2007 10:19 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  ok posílám kus zdroje je to funkce void sbin() : 
void sbin() problém jsem označil // poznámkou 
{ 
     string command; 
     system("cls"); 
     commands: 
     cout << "/sbin>"; 
     getline(cin, command); 
     if ( command == "help" ) 
     { 
     cout << "Function list and uses\n"; 
     cout << "======================\n"; 
     cout << "\n"; 
     cout << "cd ------- Change Directory - Navigate around the file system\n"; 
     cout << "cat ------ Open a file to view its contents\n"; 
     cout << "help ----- Show this menu\n"; 
     cout << "ls ------- List files/folders in a directory\n"; 
     cout << "cls ------ Clear Screen - empty the screen of all data\n"; 
     cout << "rm ------- Remove File - Delete a file\n"; 
     cout << "\n"; 
     goto commands; 
     } 
     if ( command == "ls" ) 
     { 
     cout << "dhclient\n"; 
     cout << "dhclient-script\n"; 
     cout << "dmesg\n"; 
     cout << "ifconfig\n"; 
     cout << "init\n"; 
     cout << "ipf\n"; 
     cout << "ipfs\n"; 
     cout << "ipfstat\n"; 
     cout << "ipfw\n"; 
     cout << "ipmon\n"; 
     cout << "ipnat\n"; 
     cout << "kldload\n"; 
     cout << "kldunload\n"; 
     cout << "ldconfig\n"; 
     cout << "mount\n"; 
     cout << "mount_mfs\n"; 
     cout << "mount_msdos\n"; 
     cout << "ping\n"; 
     cout << "reboot\n"; 
     cout << "route\n"; 
     cout << "shutdown\n"; 
     cout << "sysctl\n"; 
     cout << "unmount\n"; 
     cout << "\n"; 
     goto commands; 
     } 
     if ( command == "cls" ) 
     { 
     system("cls"); 
     goto commands; 
     } 
     if ( command.substring(0,2).equals("rm") )          //tady!!!! 
     { 
     cout << "File could not be found in: /sbin\n"; 
     cout << "\n"; 
     goto commands; 
     } 
     if ( command == "rm dhclient" ) 
     { 
     cout << "File was Successfully deleted\n"; 
     cout << "\n"; 
     goto commands; 
     } 
     else 
     { 
     cout << "ERROR: Command not recognized\n"; 
     cout << "\n"; 
     goto commands; 
     }      
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 10:27 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  je to zatím rozdělaný--- bez booleanů nechcu jít dál dokud nevyřeším tenhle problém pak by v tom byl bordel 
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 10:32 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  1) if (command.substr(0,2) == "rm") 
 
2) bude nejlepsi dat tuhle podminku az za vsechny ostatni, ktery hledaj "rm", protoze i kdyz das "rm dhclient" tak to splni hned prvni podminku... 
 
3) nebude lepsi si to rozdelit do mensich funkci, treba rm(string), rozdelit si prikaz na tokeny podle prazdnejch znaku a do ifu nacpat jenom if ("rm") { rm(token2); } 
 
 
 
 (odpovědět) |  | naked | 81.92.155.* | 30.4.2007 10:54 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  to by šlo moh bys mě to prosím tě trošku víc osvětlit ? jinak díky za to už to funguje ale to s těma tokenama bys mě mohl trošku popostrčit protože já mazání souborů zatím řeším přes bool, takže na začátku void sbin(); mám třeba bool dhclient = true; a pak v tom seznamu ls mám nad dhclient podmínku if (dhclient) no a když pak použiju ten příkaz rm dhclient tak mě to vyhodí file was successfully deleted a hodnota bool dhclient se nastaví na false ale tohle vypadá komplexnější 
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 11:04 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  tady mas priblizne co jsem myslel... [link] (odpovědět) |  | naked | 81.92.155.* | 30.4.2007 11:44 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  joo díky moc jsi mě pomohl ;) 
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 11:47 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  a ještě bych měl jednu menší otázečku... jak jsem říkal každej adresář mám ve spešl funcki ale... používám booleany (teď už jen k těmto účelům) jako .. no dalo by se to přirovnat.. mám zkrátka v tom programu pár úkolů (smazat pár souborů, logy a resetovat systém) a k tomu právě požívám booleany ale problém je v tom že když mám na začátku funkce všechny hodnoty nastavené na false, a člověk mezitím nějakou určitou akcí přenastaví na true, tak kdyby náhodou z jinýho "adresáře" (funkce) zavoloal znovu tu starou funkci, všechny booleany by se znovu nastavily na alse neví někdo jak to ošetřit ? díky 
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 12:29 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  ty mas stavy souboru reseny  
true = existuje, false = smazany??? 
 (odpovědět) |  | naked | 81.92.155.* | 30.4.2007 12:59 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  jo přesně tak dívej se mám to nějak taghle: 
void sbin() 
{ 
bool dulezity-soubor = true;  /existuje 
bool soubor-s-logy = true;  //existuje 
bool restartovano = false;  //neexistuje 
} 
to je jen příklad na začátku jsou všechny nastavený na true... no a když třeba smažeš soubor s logy a onen "důležitý soubor" změníš tím ty hodnoty na false.. ale když je třeba user v kořenovém adresáři... najednou si zamane že si půjde znovu do sbin a znovu zavolá funkci void sbin() znovu se všechny nastaví na původní hodnotu a to já nechcu 
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 13:04 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  no, nechci menit celou tvoji koncepci, ale nebylo by dobry udelat ten filesystem trochu interaktivnejsi? :)  
aby bylo mozny pridavat a kopirovat soubory, ktery nemusis napevno busit do programu? udelej filesystem jako stromovou strukturu, do kterej budes pridavat/menit dalsi vetve atd. pouzij k tomu treba tridu map [link] 
a nad ni stavej operace pro kopirovani/mazani/placani (odpovědět) |  | naked | 81.92.155.* | 30.4.2007 13:30 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  tak jo díky zkusím to vypadá to rozhodně jednodušeji než můj "dosavadní" program ptže ten zabírá nekřesťanský množství paměti 
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 13:32 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  Pokud to má brát příkazy, tak si udělej syntaktický analyzátor - na to potřebuješ znát konečný stavový automat a implementovat ho. 
Takže nejdřív koukni na to. nebudeš pak řešit takovéhle pseudoproblémy, které se při promyšleném zpracování vůbec objevit nemají. (odpovědět) |  | guguma | 195.113.79.10/10.0.10.* | 30.4.2007 17:23 |  
  |  
  |  
  | 
| re: Funkce substr()  v c++ | # |  
  |  no promyšlené zpracování je přesně to co můj program nemá. jeho jediný účel je trošku nasimulovat bash a provést uživatele alespoň základy linuxu než do toho půjde "naostro" dalo by se to považovat za simulátor rootování i když když máte dva comply na síti a pár linuxů, klidně i livecd, můžete si rootování užít až dosyta a reálně :D 
 
---------- 
Hello world! Segmentation fault. Core dumped. (odpovědět) |  D@N |   |   223163359 | 30.4.2007 19:02 |  
  |  
  |  
  |