Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2010-04-10 20:41:17

  szewczyk - Stary wyjadacz :P

szewczyk
Stary wyjadacz :P
Zarejestrowany: 2006-12-03

GCC return tablica ?

witam
raczkuje w C
w jaki sposób zwrócić tablice w funkcji ??

Kod:

#include <time.h>

char GetTime()
{
    char czas[128] ;
    time_t rawtime;
    time( &rawtime );

    struct tm * timeinfo;
    timeinfo = localtime( &rawtime );           /* to access LOCAL date/time info*/

    strftime( czas, 128, "%H:%M:%S", timeinfo);

    return czas ;
}

chyba że jest inny sposób na pobranie czasu systemowego ?

Offline

 

#2  2010-04-10 20:59:55

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: GCC return tablica ?

Zamiast tablicy, musisz zwrócić wskaźnik do tablicy. Całych tablic nie da się zwracać.

Offline

 

#3  2010-04-10 21:01:45

  szewczyk - Stary wyjadacz :P

szewczyk
Stary wyjadacz :P
Zarejestrowany: 2006-12-03

Re: GCC return tablica ?

w jakis sposób tego dokonać ?

Offline

 

#4  2010-04-10 21:14:05

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: GCC return tablica ?

W wypadku C++:

Kod:

#include <time.h>
#include <iostream>

char * GetTime()
{
    char *czas;
    czas=new char[128];
    time_t rawtime;
    time( &rawtime );

    struct tm * timeinfo;
    timeinfo = localtime( &rawtime );           /* to access LOCAL date/time info*/

    strftime( czas, 128, "%H:%M:%S", timeinfo);

    return czas;
}

int main()
{
    std::cout << GetTime();    
}

W wypadku C musisz zamienić "new" na odpowiednia funkcje przydzielania pamięci.

EDIT:

Takie coś też zdaje się działać:

Kod:

#include <time.h>

char * GetTime()
{
    char czas[128];
    time_t rawtime;
    time( &rawtime );

    struct tm * timeinfo;
    timeinfo = localtime( &rawtime );           /* to access LOCAL date/time info*/

    strftime( czas, 128, "%H:%M:%S", timeinfo);

    return czas;
}

int main()
{
    printf(GetTime(),'c');
}

I jest napisane w C - nie wiem jak z bezpieczeństwem takiego zwracania lokalnych zmiennych.

Ostatnio edytowany przez Huk (2010-04-10 21:18:38)

Offline

 

#5  2010-04-10 22:13:06

  szewczyk - Stary wyjadacz :P

szewczyk
Stary wyjadacz :P
Zarejestrowany: 2006-12-03

Re: GCC return tablica ?

dostaję naruszenie zasad ochrony pamięci :/

Offline

 

#6  2010-04-10 23:13:02

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: GCC return tablica ?

U mnie obie wersje (skompilowane zarówno za pomocą gcc i g++) działają i wypisują czas... nie wiem co może być nie tak w twoim przypadku...

Offline

 

#7  2010-04-11 00:26:27

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

Re: GCC return tablica ?

To że zwracasz wskaźnik to tablicy która jest zmienną lokalną (leży na stosie) i po zakończeniu funkcji wskaźnik ten będzie w 90% przypadków nieprawidłowy.

Użyj malloc() lub funkcji w postaci

void GetTime(char * wynik);

Offline

 

#8  2010-04-11 19:46:36

  szewczyk - Stary wyjadacz :P

szewczyk
Stary wyjadacz :P
Zarejestrowany: 2006-12-03

Re: GCC return tablica ?

ok wyświetla czas w main.c :)  ,ale kompiluje sie z ostrzeżeniami :

time.c

Kod:

#include <time.h>


char * GetTime()
{
    char czas[128] ;

    time_t rawtime;
    time( &rawtime );

    struct tm * timeinfo;
    timeinfo = localtime( &rawtime );

    strftime( czas, 128, "%H:%M:%S", timeinfo);
    //strftime( data, 128, "%d-%m-%Y", timeinfo);

    return czas ;
}

main.c :

Kod:

int main (int argc, char *argv[])
{

    printf("Start : %s\n",GetTime());

    return 0;
}

ostrzeżenia :

Kod:

gcc -g -c -Wall main.c -o main.o
main.c: In function ‘main’:
main.c:73: warning: implicit declaration of function ‘GetTime’
main.c:73: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
gcc -g -c -Wall time.c -o time.o
time.c: In function ‘GetTime’:
time.c:17: warning: function returns address of local variable

Offline

 

#9  2010-04-11 19:54:31

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: GCC return tablica ?

1. jak juz bylo pisane alokacja przez malloc lub przekazanie wskaznika do zaalokowanej tablicy
2. deklaracja funkcji GetTime() w main.c czyli dodac:

Kod:

char * GetTime();

"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#10  2010-04-11 20:05:45

  szewczyk - Stary wyjadacz :P

szewczyk
Stary wyjadacz :P
Zarejestrowany: 2006-12-03

Re: GCC return tablica ?

dzieki ,nie użyłem malloc lecz zadeklarowałem zmienną jako static char i pomogło ;)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)