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
 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!
 Smoleńsk BULWA!
	




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


 Stary wyjadacz :P
 Stary wyjadacz :P
	


w jakis sposób tego dokonać ?
Offline



 Smoleńsk BULWA!
 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
 Stary wyjadacz :P
	


dostaję naruszenie zasad ochrony pamięci :/
Offline



 Smoleńsk BULWA!
 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ż.
 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
 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
 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
 Stary wyjadacz :P
	


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