Stránka 1 z 1

Chyba v kodu - C [Vyreseno]  Vyřešeno

Napsal: 04 led 2017 00:34
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[i]=='/')
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[i]);

}

Re: Chyba v kodu - C

Napsal: 04 led 2017 16:18
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).

Re: Chyba v kodu - C

Napsal: 04 led 2017 16:34
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!

Re: Chyba v kodu - C

Napsal: 04 led 2017 19:34
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 :-(

Re: Chyba v kodu - C

Napsal: 04 led 2017 19:40
od satik
Jo, jsem si neuvědomil, že strcat hledá konec stringu právě podle tý nuly, kterou se tam chystáš přilepit :D

Re: Chyba v kodu - C

Napsal: 04 led 2017 19:41
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! :)