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*)。

我不能或 void* 与 const void*。

在我之前在理解 memcpy() 的实现中提出的问题中,它的类型转换为 (ADDRESS)。

可以做些什么来解决这个错误?

4

2 回答 2

3

根据标准,您不能对指针使用按位运算: 为什么不能在 C 中对指针进行按位运算,有没有办法解决这个问题?

简单的解决方案(它也在链接中指出)是使用强制转换。

于 2013-10-05T11:55:40.213 回答
-2
(s | d | count)

您应该使用逻辑或 || 而不是按位或|,因为我想您在这里检查这些参数,s 和 d 不应为 NULL,count 不应为零。

和 & 一样,应该是 &&。

于 2013-10-05T15:08:09.223 回答