C wskaźnik do tekstu

0

Witam,
Męczę się już trochę czasu z poniższą funkcją i zastanawiam się czy wszystko z nią okej ponieważ program wysypuje się.

 
char * read(int x, int y, char * tekst)
{
	COORD cor;
	cor.X = x;
	cor.Y = y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cor);
	char *res = (char*)malloc((strlen(tekst)+1)*sizeof(char));
        strcpy(res, tekst);
	char key = 0;
	while (key != '\r') {
		if (key != 0 && key != '\b') {
			putchar(key);
			int len = strlen(res) + 1;
			res = (char*)realloc(res, sizeof(char)*len);
			memset(res + len, '\0', 1);
			memset(res + len - 1, key, 1);
		}
		else if (key == '\b' && strlen(res)) {
			printf("\b \b");
			int len = strlen(res);
			res = (char*)realloc(res, sizeof(char)*len);
			memset(res + len - 1, '\0', 1);
		}
		key = _getch();
	}

	free(tekst);
	return res;
}

int main()
{
	char * p = (char*)malloc(15*sizeof(char));
	strcpy(p, "Jakis tekst");
	p = read(x, y, p);
}

Proszę o pomoc!
Z góry dziękuje :)

2

Ty chyba sobie kpisz :D
Uruchom debugger i sam się przekonaj, nikt tutaj za Ciebie nie będzie analizował tej funkcji, skoro nawet nie połasiłeś się na podanie kontekstu jej uruchamiania. W sumie to nic nie podałeś - wrzuciłeś kod i zróbcie tę swoją programistyczną magię, tak aby zaczęło działać.

0

Funkcja ma na celu "rozszerzać" bądź "skracać" tekst - edycja tekstu

0

Dobra, może inaczej.
Podaj minimalny, kompletny kod przedstawiający problem.

0

To czemu nazywa się read? I czemu nie użyłeś działających funkcji z string.h, tylko piszesz jakąś koślawą imitację?

1

To program zaliczeniowy? Bo tak brzydko nie należy bawić się pamięcią, nie dość, że poszatkuje to pamięć, to dodatkowo będzie bardzo wolne. Tak się nie programuje!

Jeśli chodzi o błąd to masz tu:

 
           int len = strlen(res) + 1;
           res = (char*)realloc(res, sizeof(char)*len);
           memset(res + len, '\0', 1);

robisz reallok o jeden za mało, pomijam, że jak ustawiasz jedną wartość, to można zrobić:

 
res[len] = 0 //ale w tym wypadku to jest wartość poza tablicą!

1 użytkowników online, w tym zalogowanych: 0, gości: 1