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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
witam
raczkuje w C
w jaki sposób zwrócić tablice w funkcji ??
#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
Zamiast tablicy, musisz zwrócić wskaźnik do tablicy. Całych tablic nie da się zwracać.
Offline
w jakis sposób tego dokonać ?
Offline
W wypadku C++:
#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ć:
#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
dostaję naruszenie zasad ochrony pamięci :/
Offline
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
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
ok wyświetla czas w main.c :) ,ale kompiluje sie z ostrzeżeniami :
time.c
#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 :
int main (int argc, char *argv[]) { printf("Start : %s\n",GetTime()); return 0; }
ostrzeżenia :
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
1. jak juz bylo pisane alokacja przez malloc lub przekazanie wskaznika do zaalokowanej tablicy
2. deklaracja funkcji GetTime() w main.c czyli dodac:
char * GetTime();
Offline
dzieki ,nie użyłem malloc lecz zadeklarowałem zmienną jako static char i pomogło ;)
Offline