C++ Linux使用char绑定套接字[14]

Lig*_*got -1 c++ sockets linux

我是C++的新手,所以这个问题绝对是愚蠢的.

在socket编程的linux文档中,我发现了这个:

 struct sockaddr {
       a_family_t sa_family;
       char       sa_data[14];

 };
Run Code Online (Sandbox Code Playgroud)

但是,当我写sockaddr address = {AF_INET, strAddress}; GCC时返回错误:

必须使用大括号括起初始化程序初始化数组

我不明白的是,如果我写的话

sockaddr address = {AF_INET, "AN_AARRAY_OF_CHAR"};
Run Code Online (Sandbox Code Playgroud)

,它的工作原理并没有返回错误.

那么"THIS ARRAY",和之间的区别是什么char test[]="THIS ARRAY"

我怎样才能解决它返回的错误?

S.M*_*.M. 5

sockaddr是任何类型的套接字操作的通用描述符.char sa_data[14]只是家庭特定数据的占位符.你根本不应该sockaddr直接使用.

每个套接字地址族都有自己特定的sockaddr_...结构类型.

对于AF_INET地址族,您必须使用sockaddr_in特定于基于IPv4的通信的结构.

对于AF_INET6地址族,您必须使用sockaddr_in6特定于基于IPv6的通信的结构.

等等.

必须对正在使用的sockaddr_...地址族使用适当的结构,并在将其sockaddr*传递给带有泛型sockaddr*参数的套接字函数时将其转换为地址.