函数返回char []而不是int

时间:2014-03-18 18:14:39

标签: c function pointers

我的C函数需要一些帮助。我正在尝试获取当前的CPU时间并将其作为char []返回以供以后使用。我得到的问题是我没有在正确的地方指针/解引用,我得到编译器警告/错误。我需要做出哪些改变才能使其正常工作?

功能:

char *get_time()
{
    char time_char[10];
    time_t rawtime;
    struct tm * timeinfo;

    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    int time = timeinfo->tm_yday*1000000 + timeinfo->tm_hour*10000 + timeinfo->tm_min*100 + timeinfo->tm_sec;

    sprintf(time_char, "%d", time);
    return *time_char;
}

使用char time_char[] = get_time();

调用函数

在将代码移动到函数并按照我需要的方式工作之前我所拥有的是:

char time_char[10];
time_t rawtime;
struct tm * timeinfo;

time ( &rawtime );
timeinfo = localtime ( &rawtime );
int time = timeinfo->tm_yday*1000000 + timeinfo->tm_hour*10000 + timeinfo->tm_min*100 + timeinfo->tm_sec;

sprintf(time_char, "%d", time);

然后我根据需要使用time_char

4 个答案:

答案 0 :(得分:4)

数组在函数的调用帧中分配,并在函数返回时释放。

您需要通过指针传递数组(作为keltar注释),在这种情况下,您不需要返回任何内容,并且该函数可以标记为void,或者分配内存malloc并返回指针。

答案 1 :(得分:3)

将原型更改为:

char *get_time(char *time);

将相应的内存分配到 调用函数 中的time,然后在完成使用后调用free(time);(同样来自调用)功能)。

此外,您的退货声明应该只是:

return time;

答案 2 :(得分:1)

首先,您无法返回指向自动局部变量的指针。其次,要返回指针,您不需要取消引用运算符。

答案 3 :(得分:0)

虽然通常这是不可取的,但有时返回字符数组很有用,如下所示:

typedef struct char10 {char str[10];} char10;

char10 get_time() {
    char10 time_char;
    // ...
    sprintf(time_char.str, "%d", time);
    return time_char;
}

一个缺点是,例如,gcc为代码提供了不必要的警告消息,例如:

    printf("%s\n", get_time().str);

你可以通过丑陋避免:

    printf("%s\n", &get_time().str[0]);