【发布时间】:2018-12-14 07:01:07
【问题描述】:
使用 WIN32 API 处理程序我希望程序从收集系统中某些信息的函数中获取数据,并将参数作为 char 传递给 DbgPrint 函数,我希望将该 char 发送到该 ip 和端口 如何获取函数 args 中没有任何错误的情况下完成了工作
我的代码就像:
#include <winsock2.h>
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
void socketfnt (auto *ipaddr, auto *portn, char*msg){
WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf("Failed. Error Code : %d",WSAGetLastError());
return 1;
}
printf("Initialised.\n");
//Create a socket
if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET)
{
printf("Could not create socket : %d" , WSAGetLastError());
}
printf("Socket created.\n");
server.sin_addr.s_addr = inet_addr(ipaddr);
server.sin_family = AF_INET;
server.sin_port = htons( portn );
//Connect to remote server
if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0)
{
puts("connect error");
return 1;
}
puts("Connected");
message = msg;
if( send(s , message , strlen(message) , 0) < 0)
{
puts("Send failed");
return 1;
}
puts("Data Send\n");
return 0;
}
void DbgPrint(char *msg){
socketfnt("192.168.1.6","4444", msg);
}
编译器显示错误,如
fff.c:6:23: error: storage class specified for parameter 'ipaddr'
fff.c:6:37: warning: type defaults to 'int' in declaration of 'portn' [-
Wimplicit-int]
void socketfnt (auto *ipaddr, auto *portn, char*msg){
你们能告诉我如何以正确的方式将参数传递给 socketfnt 函数吗 ,问候
【问题讨论】:
-
在函数参数中滥用
auto关键字。 -
那么在这种情况下,函数参数中正确的数据类型是什么
-
inet_addr()采用const char*参数,htons()采用uint16_t。所以,我会这样做:void socketfnt (const char *ipaddr, uint16_t portn, char*msg) -
那么您必须更正对(例如)
socketfnt("192.168.1.6",4444, msg);的调用(因为第二个参数是整数而不是字符串)。 -
显示 /include/winsock2.h:997:34: 注意:预期为 'const char *' 但参数类型为 'char' WINSOCK_API_LINKAGE int WSAAPI send(SOCKET s,const char *buf,int len,int 标志); ^