获取错误C2440:char []* char*(指针)
Getting error C2440: char[]* to char* (pointers)
(C 中的显而易见的初学者,不断与指针斗争)
我一直在尝试将客户端的IP地址作为服务器(使用TCP),并使用指针将其保存以稍后再使用。
在以前的功能中,我接受连接,然后将套接字保存为m_clientSocket
,而struct sockaddr
中的套接字信息称为clientaddr
。
现在,我希望下一个函数返回客户端套接字并保存源IP ,但是该程序不断崩溃。
在最后一个版本中,我尝试使用指针,但是尽管我的研究进行了研究,但我无法修复的转换错误。
char clientIPaddr[30];
sockaddr_in clientaddr;
SOCKET m_clientSocket;
功能代码
SOCKET CmTcpListener::getNewSocket(SOCKET *hSocket, char* ptrSourceIp)
{
cout << "Retrieving socket..." << endl;
if (m_newClientConnection)
{
hSocket = &m_clientSocket;
strcpy(clientIPaddr, inet_ntoa(clientaddr.sin_addr));
ptrSourceIp = &clientIPaddr;
cout << "Socket : OK" << endl;
return *hSocket;
}
else {
cout << "No new client connection." << endl;
return false;
}
}
错误
c: work 2015 tcptransport cmtcplistener.cpp(112):错误c2440:'=':不能从" char( *)[30]'转换为'char *'指向的类型是无关的;转换需要Reinterpret_cast,C风格铸造或功能风格的铸造
我假设没有必要的其余代码,但是如果需要,我会很快提供
罪魁祸首是行
ptrSourceIp = &clientIPaddr;
clientIPaddr
是char[30]
类型,因此&clientIPaddr
的类型是char(*)[30]
,即指向30个字符的数组的指针。删除&
,您会没事的,因为数组的名称本身就是指向其第一个元素的指针(从技术上讲,阵列腐烂到指针)
ptrSourceIp = clientIPaddr;
但是,现在,您没有使用ptrSourceIp
做任何事情,在函数末尾将不变,因为它像其他任何变量一样按值传递。如果要修改传递的指针ptrSourceIp
,则需要将指针传递给该指针(即指针到指针到char),因此功能的原型应为:
SOCKET CmTcpListener::getNewSocket(SOCKET *hSocket, char** ptrSourceIp)
您通过的第二个参数必须是&your_passed_ptr_to_char
。在您的功能中,您现在可以修改传递的指针,例如
*ptrSourceIp = clientIpAddr; // now we modify it
您正在尝试将clientIPaddr
的地址分配给char*
。它是char[30]
类型的,因此地址给出了char
数组的指针,而不是指向char
的指针。数组可以腐烂到指针,因此直接分配它:
ptrSourceIp = clientIPaddr;
- 构造函数 (C++) 中的 char 指针参数存在问题
- 将 char 指针传递给接受对 char 数组的引用的函数
- 分配值时,C++ char* 指针上的前递增与后递增
- char指针或char变量的默认值是多少
- 为什么为char指针分配内存不会截断char序列
- 愚蠢的问题:strcat和char指针
- 使用 ctypes 从函数返回字符串C++会给出大的 int,而不是 char 指针
- 打印char指针的Unicode和文本值
- 应对 std::字符串中的 std::<char>指针转换后的向量
- 一系列char指针
- 为什么可以将Char指针变量初始化为字符串,而INT指针变量不能初始化到整数数组
- 将char指针传递给cin和cin.get()
- 在C和C++中,将int值转换为char指针的差异
- std :: cout null char*指针中止该程序
- char指针违反访问权限
- const char指针在结构中声明
- 将字符串转换为 char 指针可以指向的 char 数组/值的最有效方法是什么
- 将Char指针数组传递到C 中的函数
- 获取错误C2440:char []* char*(指针)
- 删除Char指针在destructor中不起作用