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/.


Stary wyjadacz :P



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



Smoleńsk BULWA!




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


Stary wyjadacz :P



w jakis sposób tego dokonać ?
Offline



Smoleńsk BULWA!




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


Stary wyjadacz :P



dostaję naruszenie zasad ochrony pamięci :/
Offline



Smoleńsk BULWA!




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



inż.
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


Stary wyjadacz :P



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




Moderator Mamut
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


Stary wyjadacz :P



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