Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 9. diel - Textové reťazce v jazyku C druhýkrát - Práca so znakmi

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
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Moss
Člen
Avatar
Odpovedá na Libor Šimo (libcosenior)
Moss:22.12.2016 15:50

Napisal a trochu zmenil program :-)

Avatar
Tomáš Lipert:5.12.2018 12:20

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

int main(int argc, char** argv) {
int i;
int pom;
char veta[151];
printf("Zadejte text:");

scanf("%150[^\n]s", veta);
pom= strlen(veta);
for (i = 0; pom-i+1 != '\0'; i++)

printf("%c-", veta[pom -i]);

return (EXIT_SUCCESS);
}

Ahoj toto je program, který vypíše větu, kterou definujete a napíše jí pozpátku.
Chci se zeptat, jestli by to nešlo nějak jinak. předem děkuji za odpovědi.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Tomáš Lipert
DarkCoder:5.12.2018 21:28
#include <stdio.h>
#include <string.h>

int main(void) {
        char *str = "Tento retezec bude vypsan pozpatku.";
        for (int i = strlen(str)-1; i >= 0; i--) putchar(*(str + i)); //C99 standart

        return(0);
}
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Patrik Pastor:24.8.2019 21:31

for (i = 0; s[i] != '\0'; i++)
3 {
2 s[i] = s[i] - posun;
1 }
18 *(strchr(s, 'z')) = 'a';

Kde mam chybu s tim pointerem, nebo proc mi to kompiler terminuje? vzdyt jsem chtel ten pointer strchr() dereferencovat a adrese na kterou ukazuje ('z') priradit hodnotu 'a' , proc to nemuzu?

Avatar
Odpovedá na DarkCoder
Patrik Pastor:24.8.2019 21:31

ted jsem zmateny jak funguje to dereferencovani, kdyz mi kod vyse nefunguje

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Patrik Pastor
DarkCoder:24.8.2019 22:06

Jak funguje dereferencování, podívej na následující příklad:

#include <stdio.h>

int main(void) {
        int i = 0, j, *pi = &i;

        *pi = 10; // přiřazení hodnoty 10 proměnné i nepřímo
        printf("%d\n", *pi); // výpis proměnné i nepřímo

        i = 100; // přiřazení hodnoty 100 proměnné i přímo
        printf("%d\n", i); // výpis proměnné i přímo

        j = *pi; // přiřazení proměnné i proměnné j nepřímo
        printf("%d\n", j); // výpis proměnné j přímo

        return 0;
}

Dereferencováním ukazatele na typ je získána hodnota proměnné, na kterou ukazatel ukazuje.
Lze použít jak na levé tak pravé straně přiřazovacího příkazu.

Editované
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Patrik Pastor:24.8.2019 22:29

tak proc to nefungovalo v mem pripade? kde jsem mel *strchr(s,'z') = 'a', kde s je pole. Taky jsem chtel ziskat hodnotu adresy charu 'z', ale spadlo mi to, proc, kdyz delam to co jsi ted vyse popsla?

Avatar
Patrik Pastor:24.8.2019 22:32

for (i = 0; s[i] != '\0'; i++)
{
s[i] = s[i] - posun;
}
*(strchr(s, 'z')) = 'a';

Editované
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Patrik Pastor
DarkCoder:24.8.2019 23:07

Třeba proto, že strchr() je funkce z knihovny string.h a nikoli proměnná.

Jak se pracuje s dereferencováním u pole ukazuje následující příklad:

#include <stdio.h>

#define SIZE 10

int main(void) {
        int pole[SIZE], *pp = pole;

        // přiřazení hodnoty 10 druhému prvku pole 4 způsoby
        pole[1] = 10; // indexace pole
        *(pole + 1) = 100; // konstatní ukazatel
        *(pp + 1) = 10; // ukazatel
        pp[1] = 100; // indexace ukazatele

        // výpis hodnoty druhého prvku pole 4 způsoby
        printf("%d\n", pole[1]);
        printf("%d\n", *(pole + 1));
        printf("%d\n", *(pp + 1));
        printf("%d\n", pp[1]);

        return 0;
}

Zde je vidět, jak úzce jsou pole a ukazatele svázány.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Patrik Pastor:25.8.2019 2:24

a jak by to bylo konkretne s mym prikladem s strchr()? prirazeni hodnot poli umim taky, ale kdyz je funkce typu *chat, tak proc ji nemuzu dereferencovat a priradit ji hodnotu?

Posledné komentáre sú na spodnej časti poslednej stránky.
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é 10 správy z 35.