C wskaźnik do tekstu

C wskaźnik do tekstu
SharpShooter
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

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

Kopiuj
 
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 :)

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
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ć.

SharpShooter
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

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

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Pomorskie (Stare Kabaty)
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ę?

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
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:

Kopiuj
 
           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ć:

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.