C wskaźnik do tekstu

C wskaźnik do tekstu
SharpShooter
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 6 lat
  • 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 :)


matrixxx.cba.pl
edytowany 5x, ostatnio: ŁF
ŁF
Za wandalizację wątków możesz dostać bana
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • 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ć.


edytowany 1x, ostatnio: Patryk27
SharpShooter
Odpalałem debugger. Gdybym się nie przyglądał tej funkcji to bym nie prosił o pomoc.
SharpShooter
A dobra funkcję wrzuciłem po drobnych przeróbkach, widzę pierwszy błąd
SharpShooter
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 6 lat
  • Postów:45
0

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


matrixxx.cba.pl
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

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


SharpShooter
okej. Mniej więcej na takiej zasadzie ma to działać.
PR
  • Rejestracja:około 11 lat
  • Ostatnio:8 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ę?

SharpShooter
o jakich funkcjach mówisz?
PR
Przejrzyj string.h i użyj tego czego Ci potrzeba, nie znając dokładnie problemu, gdyż nie został podany, nie jestem w stanie podać ci dokładnej odpowiedzi, a jedynie mniej-więcej jakiej biblioteki możesz użyć : )
SharpShooter
Przeglądałem i to nie raz. Funkcji chcę użyć do edycji rekordu w którym występują takie pola jak imię, nazwisko itp. Błąd przeważnie wywala jak po raz drgi próbuje edytować rekord.
kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Łódź
  • Postów:1402
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ą!

Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
edytowany 2x, ostatnio: kaczus

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.