我有一个完美的程序,它有一个跟随结构
typedef struct SERVER{
int id;
char ip_addr[MAX_IP + 1];
int port;
}SERVER;
MAX_IP在头文件中定义。
#define MAX_IP strlen("255.255.255.255")
此代码在我的本地计算机上运行良好。我上传到服务器的那一刻,我得到以下编译错误。
objs.h:4:10: error: variably modified ‘ip_addr’ at file scope
char ip_addr[MAX_IP + 1];
可能出现的问题。
答案 0 :(得分:1)
typedef struct SERVER{
int id;
char ip_addr[MAX_IP + 1];
int port;
}SERVER;
上面的结构定义在C中无效,因为不允许成员不具有可变长度数组类型。 MAX_IP + 1
必须是整数常量,而在C中,函数调用(MAX_IP
定义为strlen("255.255.255.255")
)不是常量。
要解决您的问题,您可以改为使用MAX_IP
的定义:
#define MAX_IP (sizeof "255.255.255.255" - 1)
具有相同的值并且是整数常量。
答案 1 :(得分:1)
strlen("255.255.255.255")
不是常数。因此,你通过尝试使用可变长度数组来破坏规则。
答案 2 :(得分:0)
由于你总是使用固定字符串的strlen,是否可以将MAX_IP的定义更改为常量,而不是每次使用宏时都嵌入函数调用?如果标题的用户没有(或者不具备)内置的标准库,则会出现问题。
如果没有,您能详细说明服务器与代码运行的机器之间的差异吗?