使用 mmap() 时从 'void*' 到 'char*' 的转换无效

Invalid conversion from 'void*' to 'char*' when using mmap()

本文关键字:char 转换 无效 void 时从 mmap 使用      更新时间:2023-10-16

我有以下片段:

char* filename;
unsigned long long int bytesToTransfer;
int fd, pagesize;
char *data;
fd = open(filename, O_RDONLY);
if (fd==NULL){
    fputs ("File error",stderr);
    exit (1);
}
cout << "File Open: " << filename << endl;
pagesize = getpagesize();
data = mmap((caddr_t)0, bytesToTransfer, PROT_READ, MAP_SHARED, fd, 0);
if (*data == -1) {
    fputs ("Memory error",stderr);
    exit (2);
}
cout << "Data to Send: " << data << endl;

但当我编译时,我会收到:

错误:从"void*"到"char*"的转换无效[-fpermission]data=mmap((caddr_t)0,字节ToTransfer,PROT_READ,MAP_SHARED,fd,0);

有人能告诉我出了什么问题吗?

C++不从void*执行隐式强制转换,必须使此显式

data = static_cast<char*>(mmap((caddr_t)0, bytesToTransfer, PROT_READ, MAP_SHARED, fd, 0));

mmap返回一个void*。数据是一个字符*。你需要铸造它:

data = static_cast<char*>( mmap((caddr_t)0, bytesToTransfer, PROT_READ, MAP_SHARED, fd, 0) );

这将尝试在编译时解决类型问题。