这句话编译有问题,提示错误:lvalue required as unary '&' operand

jarekid 2013-08-14 05:55:04
linux C++ 环境:

std::string currenttime = asctime(gmtime(&(time(NULL))));


这句话编译有问题,提示错误:lvalue required as unary '&' operand


请各位大虾帮忙,多谢。
...全文
6249 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
雷志平 2014-06-26
  • 打赏
  • 举报
回复
time_t nowtime; time(&nowtime); char *currenttime = asctime(gmtime(&nowtime)); printf("the time:%s\n",currenttime); //time(NULL),直接返回的是一个长整形,类似于:gmtime(&12345); 这是不行,提示错误: 单目‘&’的操作数必须是左值,上面相当于有了具体的变量、有了地址
max_min_ 2013-08-14
  • 打赏
  • 举报
回复
引用 12 楼 howard58888 的回复:
[quote=引用 11 楼 max_min_ 的回复:] [quote=引用 9 楼 howard58888 的回复:] time(NULL)返回的是一个long型,为什么会出现这个错误,如果你深入汇编里,可以看到函数返回值一般存储在eax寄存器里,如果你写了这样的语句,像int a=f(),则调用完函数后的下一句就是mov 内存地址,eax,否则跟返回空值没什么区别,因此你上面这个&time(NULL)就相当于&void,因些会报需要左值,正解如3楼 举例如下:
int f()
{
	return 2;
}
int main()
{
	int a=f();
	f();
	return 0;
}
关键的汇编代码如下:
00401076   rep stos    dword ptr [edi]
11:       int a=f();
00401078   call        @ILT+0(f) (00401005)
0040107D   mov         dword ptr [ebp-4],eax
12:       f();
00401080   call        @ILT+0(f) (00401005)
13:       return 0;
这关这个什么事情?

 time_t time(time_t *t);
返回只是一个time_t的结构体的值而已,还没分配空间给它存储,又对它取地址操作, 肯定出问题了[/quote]晕了,难道你看不出是一个道理嘛,大神[/quote] 菜鸟,不懂汇编!
Code研究者 2013-08-14
  • 打赏
  • 举报
回复
引用 11 楼 max_min_ 的回复:
[quote=引用 9 楼 howard58888 的回复:] time(NULL)返回的是一个long型,为什么会出现这个错误,如果你深入汇编里,可以看到函数返回值一般存储在eax寄存器里,如果你写了这样的语句,像int a=f(),则调用完函数后的下一句就是mov 内存地址,eax,否则跟返回空值没什么区别,因此你上面这个&time(NULL)就相当于&void,因些会报需要左值,正解如3楼 举例如下:
int f()
{
	return 2;
}
int main()
{
	int a=f();
	f();
	return 0;
}
关键的汇编代码如下:
00401076   rep stos    dword ptr [edi]
11:       int a=f();
00401078   call        @ILT+0(f) (00401005)
0040107D   mov         dword ptr [ebp-4],eax
12:       f();
00401080   call        @ILT+0(f) (00401005)
13:       return 0;
这关这个什么事情?

 time_t time(time_t *t);
返回只是一个time_t的结构体的值而已,还没分配空间给它存储,又对它取地址操作, 肯定出问题了[/quote]晕了,难道你看不出是一个道理嘛,大神
max_min_ 2013-08-14
  • 打赏
  • 举报
回复
引用 9 楼 howard58888 的回复:
time(NULL)返回的是一个long型,为什么会出现这个错误,如果你深入汇编里,可以看到函数返回值一般存储在eax寄存器里,如果你写了这样的语句,像int a=f(),则调用完函数后的下一句就是mov 内存地址,eax,否则跟返回空值没什么区别,因此你上面这个&time(NULL)就相当于&void,因些会报需要左值,正解如3楼 举例如下:
int f()
{
	return 2;
}
int main()
{
	int a=f();
	f();
	return 0;
}
关键的汇编代码如下:
00401076   rep stos    dword ptr [edi]
11:       int a=f();
00401078   call        @ILT+0(f) (00401005)
0040107D   mov         dword ptr [ebp-4],eax
12:       f();
00401080   call        @ILT+0(f) (00401005)
13:       return 0;
这关这个什么事情?

 time_t time(time_t *t);
返回只是一个time_t的结构体的值而已,还没分配空间给它存储,又对它取地址操作, 肯定出问题了
Code研究者 2013-08-14
  • 打赏
  • 举报
回复
 time_t Curtime;
 time(&Curtime);
 std::string  currenttime = asctime(gmtime(&Curtime));
Code研究者 2013-08-14
  • 打赏
  • 举报
回复
time(NULL)返回的是一个long型,为什么会出现这个错误,如果你深入汇编里,可以看到函数返回值一般存储在eax寄存器里,如果你写了这样的语句,像int a=f(),则调用完函数后的下一句就是mov 内存地址,eax,否则跟返回空值没什么区别,因此你上面这个&time(NULL)就相当于&void,因些会报需要左值,正解如3楼 举例如下:
int f()
{
	return 2;
}
int main()
{
	int a=f();
	f();
	return 0;
}
关键的汇编代码如下:
00401076   rep stos    dword ptr [edi]
11:       int a=f();
00401078   call        @ILT+0(f) (00401005)
0040107D   mov         dword ptr [ebp-4],eax
12:       f();
00401080   call        @ILT+0(f) (00401005)
13:       return 0;
你怎么了熊吉 2013-08-14
  • 打赏
  • 举报
回复
不过我很奇怪gmtime这个函数为什么需要一个指针作为参数
你怎么了熊吉 2013-08-14
  • 打赏
  • 举报
回复
time(NULL)是一个值,不是变量,当然不能取地址
mujiok2003 2013-08-14
  • 打赏
  • 举报
回复
引用 2 楼 jarekid 的回复:
不对,这么改还是有别的问题。 invalid conversion from 'time_t' to 'const time_t*' error: initializing argument 1 of 'tm* gmtime(const time_t*)'
time_t t = time(NULL); std::string currenttime = asctime(gmtime(&t));
mujiok2003 2013-08-14
  • 打赏
  • 举报
回复
引用 4 楼 max_min_ 的回复:
[quote=引用 1 楼 mujiok2003 的回复:]
//std::string  currenttime = asctime(gmtime(&(time(NULL))));
std::string  currenttime = asctime(gmtime(time(NULL)));
不对的,

 struct tm *gmtime(const time_t *timep);
[/quote] en.
max_min_ 2013-08-14
  • 打赏
  • 举报
回复
引用 1 楼 mujiok2003 的回复:
//std::string  currenttime = asctime(gmtime(&(time(NULL))));
std::string  currenttime = asctime(gmtime(time(NULL)));
不对的,

 struct tm *gmtime(const time_t *timep);
max_min_ 2013-08-14
  • 打赏
  • 举报
回复

 time_t Curtime;
 
 time(&Curtime);

 gmtime( &Curtime );
jarekid 2013-08-14
  • 打赏
  • 举报
回复
不对,这么改还是有别的问题。 invalid conversion from 'time_t' to 'const time_t*' error: initializing argument 1 of 'tm* gmtime(const time_t*)'
mujiok2003 2013-08-14
  • 打赏
  • 举报
回复
//std::string  currenttime = asctime(gmtime(&(time(NULL))));
std::string  currenttime = asctime(gmtime(time(NULL)));

65,199

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧