Chyba v kodu - C [Vyreseno]

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Zamčeno
mikealafi
nováček
Příspěvky: 24
Registrován: 16 črc 2016 01:08

Chyba v kodu - C [Vyreseno]

Příspěvek od mikealafi »

Dobrý den,

chtěl bych vás poprosit o pomoc. Muj kód by měl sloužit k rozparsování stringu do názvu složek. Takže když je například:
C/User/Games vloží do pole foldersName = {"C","User","Games"}, kód funguje správně až na vyjímku kdy, když vložím
"C/Hra/Halo 4/Map" tak za poslední slovo Map do pole přidá "C", takže následně pole má složky
foldersName = {"C","Hra","Halo 4","MapC"}, pokud však vložím například "C/Hra/Halo 4/Ma" nebo "C/Hra/Halo 4/Mapa" chyba už se nevyskytuje . Mohl by mi někdo prosím poradit, musí to být chyba přesně na tom 13. indexu kde končí "Map".Protože pokud "zkrátím" předchozí složky a počet ubraných písmenek přidám na konec slova chyba se vyskytne na stejném indexu jako v předchozím případě. Prosím o pomoc v C dělám druhým dnem a nevím si s tím rady. Děkuji všem

Kód
void cd(char* path){
/**slouzi k pocitani poctu slov
int count = 0;

int length = (int)strlen(path);

/**slouzi k for cyklum
int i = 0;

/**spocteny poctu slov
for(i;i<length;i++){

if(path=='/')
count ++;
}
/**inicializace pole stringu
char foldersName[count][255];

/**pomocne pole pro rozparsovani
char str[strlen(path)];

strcpy(str,path);

char * pch;

pch = strtok (str,"/");

count =0;

while (pch != NULL)

{
strcpy(foldersName[count],pch);

pch = strtok (NULL, "/");

count ++;
}
printf("----------------Tokens-----------\n");

for(i =0;i<count;i++){

printf("%s \n",foldersName);

}
Naposledy upravil(a) mikealafi dne 04 led 2017 19:42, celkem upraveno 1 x.
Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: 09 led 2015 12:49
Bydliště: Krkonoše
Kontaktovat uživatele:

Re: Chyba v kodu - C

Příspěvek od satik »

Obsah foldersName jsou na zacatku nahodna data, protoze ho nikde nenulujes (a Cecko to za tebe neudela).
Ty do toho pak jen nakopirujes obsah stringu (pole charu), ale neresis jeho konec, konec se pozna tak, ze je tam znak s hodnotou 0.

Tudiz muzes udelat bud to, ze cely foldersName vynulujes a nebo musis na konec kazdyho stringu v foldersname prilepit znak 0 (treba pres strcat).
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7407
Registrován: 23 pro 2010 09:23

Re: Chyba v kodu - C

Příspěvek od faraon »

Už je to skoro šest let co se tu řešilo něco podobného, ale platí to pořád :lol:
Dva Céčkové řetězce si zajdou do baru.
Barman se jich ptá co si budou přát.
První si objednává: "Já bych si dal sklenu vína."
Potom druhý: "Já chci jen minerálku.^}{@&#<€"
Barman se udiveně obrátí na první řetězec: "Není kolega nemocen?"
A ten odpoví: "Ale ne, on je jen chybně ukončen."
Céčko za tebe neudělá vůbec nic, je jako břitva kterou se můžeš oholit dokonaleji než jakýmkoliv elektrickým strojkem, ale stačí jediný chybný pohyb a uřízneš si půlku obličeje!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)
mikealafi
nováček
Příspěvky: 24
Registrován: 16 črc 2016 01:08

Re: Chyba v kodu - C

Příspěvek od mikealafi »

while (pch != NULL)
{
strcpy(foldersName[count],pch);
strcat(foldersName[count],"\0");
pch = strtok (NULL, "/");
count ++;
}

Takto sem upravil while cyklus, ale pořád stejná chyba :-(
Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: 09 led 2015 12:49
Bydliště: Krkonoše
Kontaktovat uživatele:

Re: Chyba v kodu - C

Příspěvek od satik »

Jo, jsem si neuvědomil, že strcat hledá konec stringu právě podle tý nuly, kterou se tam chystáš přilepit :D
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
mikealafi
nováček
Příspěvky: 24
Registrován: 16 črc 2016 01:08

Re: Chyba v kodu - C

Příspěvek od mikealafi »

Tak problem vyřešen, byla hlavní chyba v tom že char str neměl místo na vrácený "\0" byl definován jen na velikost path a pokud sem přidal velikost path +1 tak chyba je vyřešena, ale děkuji! :)
Zamčeno
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Chyba CPU na desce
    od petan320 » » v Problémy s hardwarem
    16 Odpovědi
    10645 Zobrazení
    Poslední příspěvek od petr22
  • Sqlite - systémová chyba
    od cindy the skull » » v Vše ostatní (sw)
    6 Odpovědi
    12273 Zobrazení
    Poslední příspěvek od atari
  • Chyba příkazový řádek
    od zik9 » » v Windows 11, 10, 8...
    4 Odpovědi
    3506 Zobrazení
    Poslední příspěvek od zik9
  • prohližeč událostí id 1796 chyba
    od walderan » » v Problémy s hardwarem
    9 Odpovědi
    6510 Zobrazení
    Poslední příspěvek od walderan
  • Windows Update nelze stáhnout, chyba 0x80070246
    od Rewqa » » v Windows 11, 10, 8...
    11 Odpovědi
    8918 Zobrazení
    Poslední příspěvek od Rewqa

Zpět na „Programování a tvorba webu“