Ahoj,
mám string (jednoroyźměrné pole typu char) a funkci, ve které potřebuju z toho stringu číst po jednom znaku.
Zkoušela jsem getc, sscanf, ale nic nefungovalo.
Díky, Nefe
Fórum › C / C++
Čtení ze stringu po jednom znaku
spis napis co pouzivas..
kdyz mas retezec[] = "abcde";
tak retezec[0] je 'a'
az po 'e' na pozici 4
getc to bere ze standardniho vstupu takze pouzit asi nepujde.. sscanf by mel fungovat.. paznaky to muze hazet pokud neni retezec ukoncenej pomoci znaku '\0'
v MAINu mám pointer zadeklarovanej jako char * sBuffer
do fuknce ho předávám jako parametr sBuffer
v deklaraci funkce mám na jeho pozici tvar char * radek
a uvnitř funkce mám ten příkaz sscanf(radek[i],"%c",&znak);
kde znak je ten jeden načtenej znak (je to ve for cyklu)
volání v MAINu:
naplnPrvniRadek(slaveArray,sBuffer,pocetZnakuNa1Radku);
samotná fce:
int naplnPrvniRadek(char **pole,char * radek,int pocet){
int i;
char znak;
printf("\nNacitam prvni radek...\n");
for(i=0;i<pocet;i++){
znak=radek[i];
printf("Znak=%c\n",znak);
printf("\nNacteno\n");
}
}
a takhle vytvářim **pole:
char ** vytvorSlave(int radky,int sloupce){
int i;
char **p;
p=(char**)malloc(sloupce*sizeof(char*));
for(i=0;i<sloupce;i++)
p[i]=(char*)malloc(radky*sizeof(char));
return p;
}
kde radky a sloupce je pocet radku a sloupcu
trosku nechapu proc v napln radek nic nikam nenaplnujes, ale rovnou nacitas z tech retezcu, ktere jeste nejsou nijak naplnene...
potom samozrejme, kdyz mas nove alokovanou pamet, tezko muzes chtit aby v ni bylo neco smysluplneho - je tam proste smeti z programu co bezely pred tim nebo podobne
tohle je jen kousek - celý kód je delší a složitější, tak jsem ho sem nechtěla dávat
sBuffer je ukazatel char na char pole slaveBuffer ve kterém jsou uloženy znaky přečtené z první řádky...celé se to dělá dynamicky a ještě se tam používá realloc na postupný zvětšování (proto je to tak dlouhý...a k tomu si ještě proměnný pojmenovávám uplně blbuvzdorně, abych někde neudělala chybu), ale uložený to tam je dobře - když si nechám sBuffer vypsat (tedy to na co ukazuje) tak tam jsou všechny prvky správně
část kódu kde tisknu sBuffer:
for(i=1;i<=pocetZnakuNa1Radku;i++){
printf("%d ",sBuffer[i]);
}
a pokud na první řádce zadám třeba 386205
tak tenhel kus kódu vytiskne 3 8 6 2 0 5
takže v nenaplnění problém neni...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Odstránenie znaku zo stringu — založil FanatiK
Přidávání znaků do stringu — založil Šťouchal
Citanie znaku zo stringu — založil ja
[C#] Nalezení znaku ve stringu — založil MartiniBaby
Prevod Stringu do pole znaku... — založil
Moderátoři diskuze