none
一个小问题 RRS feed

  • 问题

  • char str[10] = "162";char str1[20];memcpy(str1,&(atoi(str)),1);这种写法总是报错 error C2102: “&”要求左值

    当然如果设置一个变量来保存 int i = atoi(str);把参数替换是可以的。但是这样的写法显得代码就太多了。而且atoi返回的参数是个int型,我想知道这种用法为什么错了,如果我要这样,应该怎样才实现

    2011年12月1日 8:50

答案

  • int i = 20; memcpy(str1,&i,1);这样的用法可以,我想知道为什么memcpy(str1,&(atoi(str)),1);不可以


    因为 atoi 是函数,函数的返回值是右值,不能取地址的。只有左值才能取地址。

    可以这么理解,这个返回值可能是存放在寄存器中的,那么取地址有意义吗?


    我也有自己的签名档哦!
    2011年12月2日 1:06

全部回复

  • 您是想将str的内容copy到str1中吗?直接memcpy(str1, &str, sizeof(str));就可以了


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年12月1日 11:00
    版主
  • int i = 20; memcpy(str1,&i,1);这样的用法可以,我想知道为什么memcpy(str1,&(atoi(str)),1);不可以
    2011年12月2日 0:46
  • int i = 20; memcpy(str1,&i,1);这样的用法可以,我想知道为什么memcpy(str1,&(atoi(str)),1);不可以


    因为 atoi 是函数,函数的返回值是右值,不能取地址的。只有左值才能取地址。

    可以这么理解,这个返回值可能是存放在寄存器中的,那么取地址有意义吗?


    我也有自己的签名档哦!
    2011年12月2日 1:06
  • 呵呵感谢版主和烟雨江山的回复,答案很满意
    2011年12月2日 1:42