使用 mmap() 时从 'void*' 到 'char*' 的转换无效
Invalid conversion from 'void*' to 'char*' when using mmap()
我有以下片段:
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) );
这将尝试在编译时解决类型问题。
相关文章:
- 将无符号char*转换为std::istream*C++
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将函数参数"const char*"转换为"std::string_view"是
- C ++如何在使用"tolower"时将char转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- 为什么从 char 转换为 std::byte 可能是未定义的行为?
- 如何在虚幻引擎4中将char*转换为TCHAR?
- C++:将模板类型 char 转换为 std::string
- strcmp/char* 转换无法按预期工作
- C++中的SQLite char*转换
- 无法从 const char* 转换为 const char *&
- 在 C++ 中将 char 转换为 int,而无需符号位传播
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 试图使用strCMP时的char转换错误
- 无法从'const char *'转换为'LPCTSTR'
- 将 std::vector<char> 转换为字符* 会导致字符缺陷
- 使用 static_cast 将 char 转换为 int c++
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 无法将const char转换为字符串构造字符串