Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[C++] Problem z przekazaniem (char*) lancucha znakow do main()

#1
Ściana  [C++] Problem z przekazaniem (char*) lancucha znakow do main()
Witam!
Mam taki problem: napisalem funkcje pobierz text i chcialem odpalic go z main'a jednak pomimo iz zaden blad nie wyskakuje to w main'ie wyswietlaja sie kwiatki cos jakby adres?? Nie rozumiem do konca wskaznikow...

Kod funkcji:
Kod:
char* PobierzIP()
    {
    char ip[13];
    std::cout<<"Podaj adres IP serwera: ";
    scanf("%s", &ip);
    printf("%s",ip);    // tu widzi ok a przekazuje zle WTF??
    return ip;
    }
ale gdy wywolam w main'ie:
Kod:
int _tmain(int argc, _TCHAR* argv[])
{
    char* ip = PobierzIP();

       return 0;
}
i wyswietle zawwartosc ip to okazuje sie ze sa kwiatki :/

Z gory dziekuje za pomoc
 System operacyjny: windows_xp_2003 Przeglądarka: chrome
#2
RE: [C++] Problem z przekazaniem (char*) lancucha znakow do main()
W funkcji PobierzIP alokujesz na stosie tablicę ip[13] więc w tej funkcji wszystko działa. Po wyjściu z tej funkcji stos jest zwijany i zwrócony wskaźnik wskazuje na dane, które nie są poprawne. Są przynajmniej 2 wyjścia:
1. Tablicę ip alokuj dynamicznie (ale potem pamiętaj o jej zwolnieniu)
2. Użyj std::string
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#3
RE: [C++] Problem z przekazaniem (char*) lancucha znakow do main()
3. Lub przekazuj wskaźnik na tablice (nie w dosłownym znaczeniu bo byłby to wskaźnik na wskaźnik Wesoły) w parametrze funkcji zamiast go zwracać i w nim umieść dane.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#4
RE: [C++] Problem z przekazaniem (char*) lancucha znakow do main()
Dziekuje za rady niestety zadnej nie udalo mi sie wcielic w zycie...
Zastanawiam sie nad std::string jak tego uzyc??
Co do 1. porady to bardzo nie lubie malloc'ow i reszty...

AtInnominate moglbys mi wytlumaczyc jak to zrobic ?? bo cos mi nei dziala.. Przekazuje te tablice zadeklarowana w main'ie i kompilator krzyczy ze uzywam zmiennej bez zainicjowaniaKwaśny
 System operacyjny: windows_xp_2003 Przeglądarka: chrome
#5
RE: [C++] Problem z przekazaniem (char*) lancucha znakow do main()
Proszę wszystkie trzy podane rozwiązania:
Kod:
#include <iostream>
#include <cstdio>
#include <string>

//moje rozwiązanie (3)
void PobierzIP(char* ip)
{
    std::cout<<"Podaj adres IP serwera: ";
    scanf("%s", &ip);
    printf("%s",ip);  
}


//roziwazanie 1
char* PobierzIP1()
{
    char *ip==new char[13];
    std::cout<<"Podaj adres IP serwera: ";
    scanf("%s", &ip);
    printf("%s",ip);  
    return ip;
}
//rozwiazanie 2
string PobierzIP2()
{
    char ip[13];
    
    std::cout<<"Podaj adres IP serwera: ";
    scanf("%s", &ip);
    printf("%s",ip);    // tu widzi ok a przekazuje zle WTF??
    return string(ip);
}

int main()
{
    //moje rozwiązanie
    char tablica_na_ip[13];
    PobierzIp(tablica_na_ip);
    
    //rozwiązanie nr 1.
    char *tablica_na_ip1=PobierzIP1();
    
    //roziwązanie nr 2.
    string ip=PobierzIP2();
    
    return 0;
}

BTW piszesz w C++ ale używasz scanf-ów printf-ów i malloc-ów które są raczej w C. Nie żebym mówił, że to ZUO czy coś, ale troche dziwnie wygląda używanie std::cout równolegle z scanf.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#6
RE: [C++] Problem z przekazaniem (char*) lancucha znakow do main()
(13.03.2010, 12:04)~Anonim napisał(a): Proszę wszystkie trzy podane rozwiązania:
Kod:
#
(...)
}

BTW piszesz w C++ ale używasz scanf-ów printf-ów i malloc-ów które są raczej w C. Nie żebym mówił, że to ZUO czy coś, ale troche dziwnie wygląda używanie std::cout równolegle z scanf.

Dzieki Wesoły
W sumie zrobilem to doslownie przed chwila zanim jeszcze odswiezylem strone. Okazalo sie ze problem mojej "wersji" to tak jak napisales uzywanie scanf'ow Wesoły

Kod:
std::cout<<"Podaj adres IP serwera: ";
    fflush(stdin);
    fgets(ip,15,stdin);
    return ip;
zmienilem na cos jak wyzej i dziala poprawnie Wesoły

###edit
aha no i przekazuje jako parametr char* jak radziles Wesoły i zwracam go pozniej bo jest mi dalej w main'ie potrzebny
###
Jeszcz raz BARDZO dziekuje za pomoc Beer

Pozdrawiam!
do zamkniecia
 System operacyjny: windows_xp_2003 Przeglądarka: chrome
#7
RE: [C++] Problem z przekazaniem (char*) lancucha znakow do main()
Cytat:zwracam go pozniej bo jest mi dalej w main'ie potrzebny
w jakim celu?

Ale dalej widzę, że używasz fgets zamiast std::cin.get
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#8
RE: [C++] Problem z przekazaniem (char*) lancucha znakow do main()
(13.03.2010, 15:28)~Anonim napisał(a):
Cytat:zwracam go pozniej bo jest mi dalej w main'ie potrzebny
w jakim celu?

Ale dalej widzę, że używasz fgets zamiast std::cin.get

W takim celu ze pisze klienta Echo a ze moj prowadzacy nie lubi jak sa funkcje w mainie to musze wszystko robic w pod funkcjach i wywoywac je w main(). W sumie poza systemem obslugi nazw to napisalem wszystko i wlasnie dziele program na podfunkcje Wesoły
Co do std::cin.get to jak pisalem w Devie to wystarczalo samo cin>> a ze teraz kaza nam pisac w Visual Studio w ktorym samo cin>> nie wystarcza to pisze roznie... ale rzeczywiscie wypadaoby sie zdecydowac na cos bo tak nie wypada...
 System operacyjny: windows_xp_2003 Przeglądarka: chrome
#9
RE: [C++] Problem z przekazaniem (char*) lancucha znakow do main()
Chodziło mi o zwracanie wskaźnika który przekazujesz do tej funkcji w parametrze. Tam są zapisywane dane i nie musisz już go zwracać.Oczko
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#10
RE: [C++] Problem z przekazaniem (char*) lancucha znakow do main()
cos takiego rzeczywiscie :D
dziekiOczko
 System operacyjny: windows_xp_2003 Przeglądarka: chrome
Programy: Polecane / Nowe / Inne




Podobne wątki ([C++] Problem z przekazaniem (char*) lancucha znakow do main())
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Ściana [C++] Dodawanie char do scieżki pliku Smokolisz 1 7252 16.12.2016, 10:30
Ostatni post: Szachista
  Problem ze spacja char. piotr92 3 6881 10.01.2016, 16:06
Ostatni post: piotr92
  Error: Could not find or load main class Test - Eclipse adinho58 1 7787 17.08.2015, 14:05
Ostatni post: Ajgor

Skocz do:


Wybrane wątki ([C++] Problem z przekazaniem (char*) lancucha znakow do main())
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Automatyczne wykonywanie czynności na stronie Fresher 0 1294 15.04.2020 20:53
Ostatni post: Fresher
  Visual Studio Code- zmiana folderu rozszerzeń Physicist 4 2734 05.04.2020 15:46
Ostatni post: Physicist
  Prośba o pomoc przy wyborze języka do konkretnego projektu. romands 6 1916 05.04.2020 14:07
Ostatni post: romands
Sad PhpMyAdmin w Mysql 8.0 Lauczi 3 1982 31.03.2020 16:34
Ostatni post: Lauczi
Ściana Klika pytań plz pomóżcie Samek2222 1 1898 22.03.2020 18:59
Ostatni post: Ajgor
  Pytanie - programowanie batch [cmd] Max23 0 1889 20.03.2020 01:03
Ostatni post: Max23
  Oczekiwanie na Akcje przycisku wanhelsing 8 3372 01.03.2020 19:44
Ostatni post: Szachista
Toungue Wybór szkoły średniej przez potencjalnego programistę Zikinan 1 3427 09.02.2020 15:58
Ostatni post: dzikuu86
  Poszukuję pomysłu na prosty program ;) janciu96 5 12609 13.12.2019 23:32
Ostatni post: Ajgor
  Programowanie Batch (CMD) Informatyk2019 0 4430 11.12.2019 18:30
Ostatni post: Informatyk2019
  [JavaScript] Znajdowanie przedziału czasu rafal12999 0 1974 10.12.2019 17:58
Ostatni post: rafal12999
  Przekazywanie wskaźnika przez referencję w Qt Trojan3000 3 12181 10.12.2019 13:16
Ostatni post: Ajgor
  Proszę o pomoc w uzupełnieniu ankiety dt. Zawodu Programisty MaleMonki 0 2485 17.11.2019 12:47
Ostatni post: MaleMonki
  Spring framework – jakie strony polecacie do nauki? olek23 5 6507 15.11.2019 15:57
Ostatni post: Alsenas
  Programowanie windy (problem) w C++ mysza2323 2 5474 06.11.2019 23:04
Ostatni post: mysza2323