0

コードと、受信したデータに応じてバイト転送またはワード転送の必要性を理解した後、memcpy.c の実装を試しています。

#include<stdio.h>

void* my_memcpy(void*,const void*,int); // return type void* - can return any type

struct s_{
        int a;
        int b;
};

int main(){
        struct s_ ss,dd;
        ss.a = 12;
        ss.b = 13;
        printf("\n sizeof(struct) : %d \n",sizeof(ss));
        my_memcpy(&dd,&ss,sizeof(ss));
        printf("\n a:%d b:%d \n",dd.a,dd.b);
        return 0;
}

void* my_memcpy(void* s,const void* d,int count){
        if(((s | d | count) & (sizeof(unsigned int)-1)0)){
                char* ps = (char* )s;
                char* pd = (char* )d;
                char* pe = (char* )s + count;
                while(ps != pe){
                        *(pd++) = *(ps++);
                }
        }
        else{
                unsigned int* ps = (unsigned int* )s;
                unsigned int* pd = (unsigned int* )d;
                unsigned int* pe = (unsigned int* )s + count;
                while(ps != pe){
                        *(pd++) = *(ps++);
                }
        }
}

エラー: バイナリへの無効なオペランド | (void* および const void*)。

const void* で void* を作成することはできませんでした。

前にmemcpy() の実装を理解するで尋ねた質問では、(ADDRESS) に型キャストされます。

このエラーを解決するにはどうすればよいですか?

4

2 に答える 2

-2
(s | d | count)

論理または || を使用する必要があります。ここでこれらのパラメーターをチェックしていると思われるため、ビット単位または | ではなく、s と d を NULL にすることはできず、count を 0 にすることもできません。

& と同じ、&& にする必要があります。

于 2013-10-05T15:08:09.223 に答える