Chciałem napisać funkcję, która wczyta napis od użytkownika i przekaże go do maina, aby następnie wyświetlić ten napis z funkcji main.
Napisałem coś takiego, ale nie działa i nie mam zielonego pojęcia dlaczego. Bardzo zirytowany tym faktem proszę was o pomoc gdyż nie jestem już w stanie myśleć.
Piszesz funkcje, która zwraca wzkaźnik na char i przyjmujesz wskaźnik. Później deklarujesz wskaźnik, który na nic nie wskazuje(bo nawet w twoim kodzie nie ma na co wskazywać).
Wydaje mi się, że pisałeś ten kod bez wiedzy co to wskaźnik i do czego służy, a ten przykład spokojnie można by napisać bez użycia tego problematycznego elementu. Może warto się rozejrzeć za jakąś książką do C?
Wskaźnik sam z siebie nie alokuje pamięci. Zmienna napis w main nie została zainicjalizowana żadną wartością, więc zawiera śmieci (to co znajdowało się w tym miejscu pamięci gdzie została umieszczona zmienna napis).
W funckji wczytaj funckji scanf nie przekazujesz swojego argumentu tekst (który najpewniej powinien wskazywać na zaalokowany bufor), tylko wskaźnik do argumentu tekst. To co wpiszesz zostanie zapisane w zmiennej tekst ( nie w tym na co ona wskazuje), jeśli wpiszesz coś dłuższego to popsujesz sobie ramkę stosu.
Nie możesz tak zdefiniować zmiennej bo kompilator musi znać rozmiary zmiennych. C nie jest zbyt wysokopoziomowym jezykiem i nie ma takich bajerów jak samorealokujące się tablice.
Taki zapis możesz zastosować w liście argumentów funkcji, ale nie oznacza on tego co byś chciał (klik, co prawda o C++ ale w C jest tak samo)
Możesz zmodyfikować funkcję wczytaj, tak aby zwracała typ void. Jako argumenty funkcji przyjmujesz: char tekst[], int maks_rozmiar). I w łańcuchu formatującym funkcji scanf dajesz odpowiednie zabezpieczenia. Oczywiście tablicę, którą przekazujesz musisz najpierw zadeklarować w funkcji main, podając konkretny rozmiar. Można również użyć dynamicznej alokacji pamięci z wykorzystaniem wskaźników (funkcje malloc i realloc).