我已经读取了/proc/uptime的值(这是上次引导后的秒数),我正在尝试将其转换为: DD:HH:MM:SS。我不断地得到这样的错误:“作为赋值的左操作数所需的lvalue:*
这是我的密码:
/**
* Method Retrieves Time Since System Was Last Booted [dd:hh:mm:ss]
*/
int kerstat_get_boot_info(sys_uptime_info *s)
{
/* Initialize Values To Zero's */
memset(s, 0, sizeof(sys_uptime_info));
/* Open File & Test For Failure */
FILE *fp = fopen("/proc/uptime", "r");
if(!fp) { return -1; }
/* Intilaize Variables */
char buf[256];
size_t bytes_read;
/* Read Entire File Into Buffer */
bytes_read = fread(buf, 1, sizeof(buf), fp);
/* Close File */
fclose(fp);
/* Test If Read Failed Or If Buffer Isn't Big Enough */
if(bytes_read == 0 || bytes_read == sizeof(buf))
return -1;
/* Null Terminate Text */
buf[bytes_read] = '\0';
sscanf(buf, "%d", &s->boot_time);
&s->t_days = s->boot_time/60/60/24;
&s->t_hours = s->boot_time/60/60%24;
&s->t_minutes = s->boot_time/60%60;
&s->t_seconds = s->boot_time%60;
}
我的结构是这样的:
typedef struct {
/* Amount of Time Since Last Boot [dd:hh:mm:ss] */
/* Time When System Was Last Booted */
int boot_time;
int t_days;
int t_hours;
int t_minutes;
int t_seconds;
} sys_uptime_info;
我不喜欢使用int,因为在这种情况下没有意义.我尝试过double和float,但是当我这样做时,我很难从buf读取值到boot_time。非常感谢您的帮助!
发布于 2013-10-06 17:33:03
这是你的问题
&s->t_days = s->boot_time/60/60/24;
&s->t_hours = s->boot_time/60/60%24;
&s->t_minutes = s->boot_time/60%60;
&s->t_seconds = s->boot_time%60;变到
s->t_days = s->boot_time/60/60/24;
s->t_hours = s->boot_time/60/60%24;
s->t_minutes = s->boot_time/60%60;
s->t_seconds = s->boot_time%60;当您看到错误:“作为赋值的左操作数所需的lvalue时,首先要检查的是每个赋值的左手侧。lvalue应该始终解析为内存地址。变量名称是lvalue,可以将其比作对象。s->t_day是一个可分配值的lvalue,它可以被分配为一个不相同的值&s->t_days.lvalue,因为它们可以出现在分配的左边。rvalue是可以出现在右边的值。在这种情况下,赋值操作符的左边有一个rvalue。
https://stackoverflow.com/questions/19211518
复制相似问题