在了解代码以及根据收到的数据进行字节传输或单词传输的需求后,我正在尝试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++);
}
}
}
错误:二进制操作数无效 |(无效*和常量无效*(。
我不能或一个空*与常量空*。
在我之前在理解 memcpy(( 的实现中提出的问题中,它的类型转换为 (ADDRESS(。
可以做些什么来解决此错误?
根据标准,不能对指针使用按位运算:为什么你不能在 C 中的指针上进行按位运算,有没有办法解决这个问题?
简单的解决方案(在链接中也指出(是使用强制转换。
(s | d | count)
你应该使用逻辑或||而不是按位或|,因为我想你在这里检查这些参数,s和d不应该是NULL,计数不应该为零。
与 & 相同,应为 &&。