Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Diskusia – 8. diel - Textové reťazce v jazyku C

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Honza Černoch:25.11.2019 19:30

kde jsem udelal chybu?

 
Odpovedať
25.11.2019 19:30
Avatar
Odpovedá na Honza Černoch
Honza Černoch:25.11.2019 20:26

chybu jsem uz nasel:

#include <stdio.h>
#include <string.h>

int main()
{
char text[100];
int pismena;
printf("Napis slovo a ja spocitam pocet pismen: \n");
scanf("%99s", text);
pismena = strlen(text);
printf("Slovo ma %d pismen.", pismena);

return 0;
}

 
Odpovedať
25.11.2019 20:26
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Honza Černoch
DarkCoder:25.11.2019 20:37

Slovo je skupina hlásek tvořící ustálený celek a mající určitý ustálený význam. Z programátorského hlediska se jedná o jednorozměrné pole znaků, někdy též nazývaný řetězec. Pro uložení slova je třeba deklarovat proměnnou jako pole znaků.

Např.

char text[50];

Tímto deklaruješ pole do kterého se vejde 50 znaků (v případě řetězce 49 plus '\0'). Pro čtení řetězců se používá funkce fgets(). Na výsledku bys pak prováděl některé úpravy. Když chceš použít funkci scanf(), je třeba si uvědomit, že načítání Ti ukončí bílý znak a nikoli tečka, čárka, vykřičník, otazník, apod. Pokud Ti stačí mezera, můžeš funkci scanf() použít. Při načítání řetězce se u funkce scanf() nepoužívá ampersand. Předává se adresa pole a tedy argumentem je jméno pole.

#include <stdio.h>
#include <string.h>

#define SIZE 50

int main(void) {
        char text[SIZE];

        scanf("%s", text);
        printf("%d\n", strlen(text));

        return 0;
}
Odpovedať
25.11.2019 20:37
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Martin Russin:2.8.2021 13:58

Ahoj, chcel by som Ťa prosím opýtať na používanie funkcií gets() a fgets(). Z toho čo si napísal viem, že funkcia gets() je už zastaralá a bola nahradená funkciou fgets().

Nasledujúci kód sa mi neskompiluje a pri funkcii fgets() sa vypíše nasledujúca chyba: too few arguments to function 'fgets'. V čom je chyba?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    char buffer[256];
    fgets(buffer);
    puts(buffer);
    return (EXIT_SUCCESS);
}

Ten istý kód s použitím funkcie gets() sa mi skompiloval - fungoval ako mal, avšak pri funkcii gets() sa mi vypísala iná chyba.

Vopred Ti ďakujem za odpoveď.

 
Odpovedať
2.8.2021 13:58
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Martin Russin
DarkCoder:2.8.2021 15:04

Chybová hláška jasně říká, že voláš funkci fgets() s nesprávným počtem parametrů. Funkce fgets() má parametry tři, nikoli jeden.

Podívej se na její popis:
Popis funkce fgets()

Odpovedať
2.8.2021 15:04
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Libor Šimo (libcosenior)
DarkCoder:18.12.2024 16:58

Pointer rozhodně není adresa v paměti. Pointer je proměnná, jejíž hodnotou je adresa objektu na který ukazuje.

Odpovedať
18.12.2024 16:58
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:18.12.2024 17:07

Bylo by rovněž dobré popsat detailně to jak funguje a co tvoří funkci scanf(), když už ve výkladu používáte omezenou délku textu. Totéž platí i pro znak & v této funkci, kterou používáte od 3. lekce. Dále to že s polem se předává adresa je nesmysl. Předává se pouze adresa počátku pole.

Odpovedať
18.12.2024 17:07
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:10. februára 12:22

Článek o řetězcích by si zasloužil i aby obsahoval informaci o funkci strncpy() pro vyšší bezpečnost.

Odpovedať
10. februára 12:22
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 8 správy z 48.