Napisanie funkcji zwracającej nowy łańcuch w dynamicznie zaalokowanej pamięci nie jest problemem. Walczę z funkcją odwracającą łańcuch znaków w C, ale bez zwracania wskaźnika do nowego łańcucha. To powinno szczególnie proste, gdyż mamy pewność, że długość łańcucha nie zmieni się.
Pierwszy pomysl, podaje go poniewaz zastanawia mnie czemu nie moge skopiowac dowolnego lancucha znakow na adres wskazywany przez *str?
int reverse(char** str)
{
int len = strlen(*str);
char* eptr = *str + len - 1;
char* bptr = *str;
char buf[len + 1];
char* bufptr = buf;
while(*bptr) {
*bufptr = *eptr;
--eptr; ++bufptr; ++bptr;
}
// po wyswietleniu widze, ze otrzymalem to co chcialem
// printf("str: %s buf: %s\n", *str, buf);
// powoduje segmentation fault
strcpy(*str, buf);
}
Tak wydaje mi sie prosciej i ladniej:
int reverse(char** str)
{
int len = strlen(*str);
char* copy = strdup(*str);
char* strptr = *str;
char* endptr = copy + len - 1;
while(*strptr) {
// segmentation fault w nastepnej linijce (nie chce pozwolic na zapis)
*strptr = *endptr;
--endptr; ++strptr;
}
free(copy);
}
Tylko, ze program nie pozwala mi na zmiane mimo, ze wskazniki wskazuja na wlasciwe elementy (wyklada sie przy przepisaniu
*strptr = *endptr;
). Dlaczego?
Pozdrawiam,