4
#include <stdio.h>
#include <string.h>

struct s
{
    int data;
} fun()
{
    static struct s ss; 
    ss.data = 20;
    return ss;
}

int main()
{
    struct s ss;
    memcpy(&ss, &(fun()), sizeof(struct s));

    printf("\n Data: :%d", ss.data);

    return 0;
}

上記のプログラムでは、リターンタイプが言及されている構造体を定義しようとしています。struct s正常に定義されました。

これは有効な使用法ですか?私はこのような実際のシナリオを見たことがありません。

このプログラムを機能させる方法は??

このコンパイラエラーが発生します:

asd.c: In function ‘main’:
asd.c:21:15: error: lvalue required as unary ‘&amp;’ operand
4

1 に答える 1

7

行以外はすべてmemcpy正しく(少し読みにくいですが)、コンパイラエラーは何が問題なのかを示します。「一時的」(つまり、関数呼び出し式の結果)のアドレスを取得することはできません。

ただし、もっと自然な方法で書くこともできますし、そうすべきです。

struct s ss = fun();
于 2012-09-03T07:12:41.997 に答える