Přepisování znaku – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Přepisování znaku – C / C++ – Fórum – Programujte.comPřepisování znaku – C / C++ – Fórum – Programujte.com

 

Sprinter
~ Anonymní uživatel
102 příspěvků
21. 1. 2013   #1
-
0
-

Ahoj,

Nepochopitelně se mi přepisuje znak "B" na znak " ". Stane se tak, když kopíruji jeden řetězec do druhýho (který ale nemá vůbec nic společného s daným znakem... Nevíte, kde by mohla být chyba?

char *left_factorization (char *result, char *rules, int accord, char substitute)
{	
	int i;
	int j;
	int k;
	int counter = 0;
	int size = strlen(result);
	bool empty_string = false;
	char temp [size];
	char *token;
	char *next_token;
	char working_rules [size];
	result[0] = '\0';
	temp[0] = '\0';
	working_rules[0] = '\0';
	printf("Sustituce {%c}\n", substitute); // vytiskne B - spravne
	strcpy(working_rules, rules);
	printf("Sustituce {%c}\n", substitute); // vytiskne znak mezery - chybne
Nahlásit jako SPAM
IP: 147.228.209.–
vitamin+8
Grafoman
21. 1. 2013   #2
-
0
-

Mne to funguje normalne, skus si tie polia alokovat dynamicky(cez malloc/calloc) ci ti to bude stale robit, ak nie tak snad pomoze zmena kompilatoru :).

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
21. 1. 2013   #3
-
0
-

   

int size = strlen(result);

char working_rules [size];

strcpy(working_rules, rules);

kde bereš jistotu, že result je nejméně o jeden znak delší než rules? Potřebuješ mít size > strlen(rules).

hu

Nahlásit jako SPAM
IP: 195.178.67.–
vitamin+8
Grafoman
21. 1. 2013   #4
-
0
-

#3 hlucheucho
To som si nevsimol.

Pre toto je lepsie tu pamet alokovat na heape, nebude si potom prepisovat premenne na stacku.

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
21. 1. 2013   #5
-
0
-

Odhaduji, že *result ukazuje na místo, kam funkce zapíše výsledek. Asi by tam mělo být  

int size = strlen(rules);

char working_rules [size+1];

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Sprinter
~ Anonymní uživatel
102 příspěvků
21. 1. 2013   #6
-
0
-

#5 hlucheucho
Pravda, bylo to tím. Neuvědomil jsem si že musim přidávat 1. Děkuju

Nahlásit jako SPAM
IP: 147.228.209.–
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, 10 hostů

Podobná vlákna

Prepisovani radku v C — založil S.Salomon

Přepisování v souboru — založil Kateřina Hrušková

Plynulé přepisování času — založil Cpp_Amater

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ý