Return Arrays i C

Tags:    c++

Jeg har problemer med at overfører ting via arrays i C.
Koden nedenunder har en funktion der retunere en char Array.
Test printen inden den bliver retuneret er fin, men efter den blevet hentet af mainmetodens printf printer den noget mærkeligt ud =

Testprinten
Test 02-06-2006 14:50:07.

Printen efter den er returneret
@T�؞�Ԟ���@�󿼄T����

Kode-------



#include
#include
#include
#include
#include
#include

char* getTime();

//TEST PROGRAM
int main()

{
char *tid = getTime();
printf("%s", tid);
return 0;
}

char* getTime() //http://souptonuts.sourceforge.net/code/gettimeofday.c.html Link er tilpasset
{

char buffer[30];
struct timeval tv;

time_t curtime;

gettimeofday(&tv, NULL);
curtime=tv.tv_sec;

strftime(buffer,30,"%m-%d-%Y %T.",localtime(&curtime));
char* tempChar = buffer;
printf("Test %s \\n" , tempChar);

return tempChar;
}



mvh X



2 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Du skal allokere dit array på heap'en, ikke på stakken.

Din char buffer[30] går ud af scope (dvs. bliver slettet fra stakken igen) efter funktionens slut. Alle variable registreret på stakken, vil blive slettet, efter de går ud af scope:

a eksisterer ikke her!
{
int a[30];
}
a eksisterer ikke her!

I funktionen skal du benytte:
char *buffer = (char *)malloc(30);

Efter du har benyttet det (dvs. efter du har printet det i main()):
free(buffer);

Men jeg vil egentlig anbefale dig at gøre det anderledes, idet der ellers hurtigt kan opstå en memory leak, hvis du mister overblikket over, hvor meget du allokerer/deallokerer.

void getTime(char *buffer)
{
struct timeval tv;

time_t curtime;

gettimeofday(&tv, NULL);
curtime=tv.tv_sec;

strftime(buffer,30,"%m-%d-%Y %T.",localtime(&curtime));
printf("Test %s \\n", buffer);
}

int main()
{
char *buffer = (char *)malloc(30);
getTime(buffer);
printf(buffer);
free(buffer);
}

Du har ikke mulighed for at benytte C++, vel? For ellers kan det laves meget nemmere med std::vector (eller anden container), så du ikke selv skal holde styr på allokeringerne/deallokeringerne.

1101110100010110000101000001

Killers don't end up in jail - they end up on a high-score!

[Redigeret d. 06/02-06 16:04:50 af Nicolai Lyster Fersner]



Kunne du ikke lige sætte din kode i en 'pre' blok ?



t