Just sånt här får man vara lite försiktig med. När man returnerar en pekare till något måste man se till att det den pekar på är globalt, och alltså inte ligger på stacken, där den utan vidare kan skrivas över vid ett senare tillfälle. Detta kan lösas med storage class specifiern static som i det här fallet, vilket ser till att datan överlever efter att funktionen har returnerat.
Kod:
#include <stdio.h>
char *get_str(void)
{
static char mening[] = "en mening?";
return mening;
}
int main(void)
{
char *str;
str = get_str();
printf("%p - %s\n", str, str);
return 0;
}
Just strängar är speciella eftersom de är data, och sparas i datasegmentet (inte på stacken). Det var därför inget större fel på din betygslösning i princip, men det är kanske snyggare att explicit delkarera strängarna som static:
Kod:
char *betyg(int points)
{
static char *u = "U";
static char *g = "G";
static char *vg = "VG";
if (points == 40) {
return vg;
}
else if (points >= 30) {
return g;
}
else {
return u;
}
}