Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c存储中的void类型变量_C_Sockets_Struct_Client Server_Void - Fatal编程技术网

c存储中的void类型变量

c存储中的void类型变量,c,sockets,struct,client-server,void,C,Sockets,Struct,Client Server,Void,C中的void类型变量是什么? 我有一个粗略的想法,但不确定如何在下面的场景中使用它们 服务器/客户端程序 我有一个结构数组,其中包含主机名和服务器中的地址。我想通过套接字将其发送到客户端。我怎样才能做到呢 struct ipinfo{ char hostname[64]; char address[64]; } struct ipinfo allip[5]; 我读了一些我可以复制到特定内存位置的void类型变量,然后他们发送变量?有人能解释一下这个概念吗?我真的很感激。空指针主要用

C中的void类型变量是什么? 我有一个粗略的想法,但不确定如何在下面的场景中使用它们

服务器/客户端程序

我有一个结构数组,其中包含主机名和服务器中的地址。我想通过套接字将其发送到客户端。我怎样才能做到呢

struct ipinfo{

  char hostname[64];
  char address[64];
}
struct ipinfo allip[5];

我读了一些我可以复制到特定内存位置的void类型变量,然后他们发送变量?有人能解释一下这个概念吗?我真的很感激。

空指针主要用于函数参数中,当您希望该参数为任何类型时,因为您可以将任何类型强制转换为空,然后返回到任何类型而不丢失数据,使用空指针唯一不能做的事就是取消对它的引用。

我认为空指针并不是您希望的意思
void
在类C语言中用于表示未知类型或无类型。例如,
void*
是一个void指针。它是一个内存地址,其中包含一些数据,但数据的格式(甚至其大小)没有指定。为了使用该数据,您需要为其指定某种类型,通常是通过赋值或显式或隐式转换

下面是一个例子:

void * memory = malloc(16);
memory[0] = 0; // this won't compile!
int * int_array = memory;
int_array[0] = 0; // this is ok because we know the type
void exit(int status);
(void)memset(memory, 0, 16); // why does memset have a return value??
int main(void) {
    ...
}
void还用于指示函数没有返回值

下面是一个例子:

void * memory = malloc(16);
memory[0] = 0; // this won't compile!
int * int_array = memory;
int_array[0] = 0; // this is ok because we know the type
void exit(int status);
(void)memset(memory, 0, 16); // why does memset have a return value??
int main(void) {
    ...
}
void还可以用作指示您有意放弃函数调用的返回值。这可以提高程序的可读性,或抑制某些编译器诊断

下面是一个例子:

void * memory = malloc(16);
memory[0] = 0; // this won't compile!
int * int_array = memory;
int_array[0] = 0; // this is ok because we know the type
void exit(int status);
(void)memset(memory, 0, 16); // why does memset have a return value??
int main(void) {
    ...
}
void的另一个用途是指示空参数列表。在C语言中,像
main()
这样声明的函数有一个未指定的参数列表,而不是空列表

下面是一个例子:

void * memory = malloc(16);
memory[0] = 0; // this won't compile!
int * int_array = memory;
int_array[0] = 0; // this is ok because we know the type
void exit(int status);
(void)memset(memory, 0, 16); // why does memset have a return value??
int main(void) {
    ...
}

恐怕这些应用程序都无法帮助您解决套接字问题。

在C中,唯一可以将void用作变量类型的时间是指针。当你不确定你有什么类型的数据时,它们很方便

void * somePointer;
这可以用于各种事情

在不知道类型的情况下引用对象

处理没有类型的普通内存。Malloc(我相信在C++中是新的)返回一个空指针,因为此时内存没有类型

尽量不要使用空指针,它们通常是远离的好主意。可能导致错误和头痛。你常常可以找到更好的解决办法

void关键字也可以用于函数前面

void printHello(void)
{
   printf("Hello");
}
在这个函数中,我们使用void,因为它不返回任何内容。Void函数可以简单地执行我们分配给它们的任何任务,而不返回任何内容。我们也不需要将任何数据传递到函数中,因此我们在参数中指定void

void printHello() // <- This is bad in C, it will take any number of anything practically
{
  printf("Hello");
}
注:如果你一直在学习C++,你需要记住一些关于函数参数的东西。
void printHello() // <- This is bad in C, it will take any number of anything practically
{
  printf("Hello");
}

void
不是完整类型。不能有类型为
void
的变量。
void
类型要么在函数不返回任何内容时应用于函数返回,要么在函数没有参数时应用于函数的参数列表,要么在指针指向的类型未知时应用于指针变量。您正在使用什么API调用来发送数据?我将把struct存储到void指针中,然后发送(fd,void*stored,sizeof(struct),0),然后在客户端recv(fd,void*,sizeof(struct),0),并进一步将void变量赋值给struct。假设客户机和服务器都声明了struct,你是说空指针,对吗?您不能有void函数参数。谢谢您指出,我根据编辑了我的答案。您将如何处理从服务器客户端发送结构数据的问题?任何想法。。。谢谢你advance@sean我建议使用谷歌协议缓冲区之类的工具来整理和解压数据。但你的问题实际上更像是一个套接字问题,而不是C或void问题。也许你应该发布一个新的问题来解释你到底想要完成什么。