我的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
。
答案 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]);