Chyba v kódu při převodu mezi číselnými soustavami – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Chyba v kódu při převodu mezi číselnými soustavami – C / C++ – Fórum – Programujte.comChyba v kódu při převodu mezi číselnými soustavami – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
avalagne0
Newbie
11. 11. 2012   #1
-
0
-

Ahoj,
napsal jsem program na převod čísla z libovolné soustavy do desítkové, ale při skončení programu dostanu chybu "Run-Time Check Failure #2 - Stack around the variable 'cislo' was corrupted."

Já vím, že chyba je, že tam předávám "jakoby" prázdný řetězec, ale nevím, jak to jinak napsat...
Tady je kód:

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

int do_desitkove(char cislo[], int zaklad);

int main()
{
	char cislo[] = "";
	int zaklad = 0, vysledek = 0;

	printf("Zadejte libovolne cislo: ");
	scanf("%s", cislo);
	printf("Zadejte soustavu, ve ktere cislo je: ");
	scanf("%d", &zaklad);
	if(zaklad < 1)
	{
		printf("Neplatny zaklad pro soustavu!\n");
		return 0;
	}
	vysledek = do_desitkove(cislo, zaklad);
	printf("Cislo %s v soustave o zakladu %d\n", cislo, zaklad);
	printf("odpovida cislu %d v desitkove soustave.\n", vysledek);

	system("pause");
	return 0;
}

int do_desitkove(char cislo[], int zaklad)
{
	int nacteneCislo = 0;
		
	nacteneCislo = strtol(cislo, 0, zaklad);
	return nacteneCislo;
}

Díky za rady!

Nahlásit jako SPAM
IP: 83.208.55.–
Řešení
zlz
~ Anonymní uživatel
634 příspěvků
11. 11. 2012   #2
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

Můžeš tomu řetezci rezervovat víc místa. A ještě by bylo dobré v tom formátu pro scanf určit maximální délku dat, jinak tam pořád půjde zadat víc.

char cislo[20] = "";
...
scanf("%20s", cislo);
Nahlásit jako SPAM
IP: 80.188.216.–
avalagne0
Newbie
11. 11. 2012   #3
-
0
-

#2 zlz
A jo, já to bral tak, že si pak překladač sám doplní, kolik místa potřebuje rezervovat... Ono to tak je, ale v tomhle případně to nezafungovalo, protože jsem ten řetězec naplnil až poté... Chápu to dobře?  

Jinak díky za ten scanf, věděl jsem, že to funguje například na počet desetinných míst u čísel, ale takhle na řetězec ne...

Nahlásit jako SPAM
IP: 83.208.55.–
KIIV
~ Moderátor
+43
God of flame
11. 11. 2012   #4
-
0
-

prekladac samozrejme zarezervoval... misto pro  "" tj. jeden znak (ukoncovaci '\0')

jinak kompilator neni vedma.. nema kristalovou kouli a netusi ze nevis co delas :)

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
avalagne0
Newbie
11. 11. 2012   #5
-
0
-

#4 KIIV
Jojo, už je mi to jasný  

Nahlásit jako SPAM
IP: 83.208.55.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý