
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;
Používáš jako index, ale na začátku jsi proměnnou neinicializoval.
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ší.
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í:
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.
Díky, značím vyřešeno, bylo to iterací, radši jsem to překopal na FOR.