Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Céčko, jednoduchý zárhel s returnem

Dobrý večer, potřeboval bych prosím poradit s kodem v céčku.
Mám ošetření, že když je kterýkoli znak z řetězce jiný než velké písmeno tak se proměnná nastaví na 1. Na konci testuju a když je proměnná 1 tak se musí pomocí return navrátit NULL, jenže ten vrátí podivné znaky. V opačném případě to má vrátit řetězec výsledek. Jenže jakmile ta kdekoliv mám return výsledek, t return NULL nevrací NULL ale podivné znaky o velikosti výsledek. Díky za rady.

int i;
    int delka = 0;
    char *vysledek;
    char *pom;
    int test = 0;

    pom = str;
    while (*pom != '\0')
    {
        pom++;
        delka++;
    }

    while (i<=delka)
    {
        if (*(str + i) < 65) test = 1;
        if (*(str + i) > 90) test = 1;
        i++;
    }

    vysledek = (char*)malloc(delka + 1 * sizeof(char));

    for (i=0; i<=delka; i++)
    {
        if (*(str + i) > 87)
        {
            *(vysledek + i) = *(str + i) - 25 + 2;
        }
        else *(vysledek + i) = *(str + i) + 3;
    }

    vysledek[delka] = '\0';

    if (test == 1)
    {
        free(vysledek);
        return NULL;
    }
    else return vysledek;
Předmět Autor Datum
int i; Používáš jako index, ale na začátku jsi proměnnou neinicializoval. while (i<=delka) Uprav… nový
Niko Bellic 13.12.2014 22:22
Niko Bellic
Díky, značím vyřešeno, bylo to iterací, radši jsem to překopal na FOR. poslední
chcivsevedet 13.12.2014 23:01
chcivsevedet
int i;

Používáš jako index, ale na začátku jsi proměnnou neinicializoval.

while (i<=delka)

Uprav nerovnost na ostrou, tzn. místo <= dej jen <. Spočítáš sice správně délku, ale pole se indexují od 0, takže max. index je o jedničku menší.

for (i=0; i<=delka; i++)

Tady to stejné.

Pak to funguje. Velké písmena to posune o 3 pozice a pokud se vyskytne malé, tak to vrátí NULL (nevím k čemu to je ale budiž).

Ještě pár drobností:

if (*(str + i) < 65) test = 1;

Jak narazíš na nevyhovující znak, můžeš cyklus ukončit příkazem break. Nemá cenu procházet další znaky. A hned za cyklem můžeš provádět kontrolu proměnné test a vracet NULL, pokud byla nastavena. Je vcelku zbytečné alokovat pole a provádět další operace, když už stejně víš, že budeš vracet NULL.

Zpět do poradny Odpovědět na původní otázku Nahoru