C++ C++;:初始化‘的参数1;内部代理:tun_alloc(char*,int)和#x2019;[-fpermissive]
我有一门课,那就是C++ C++;:初始化‘的参数1;内部代理:tun_alloc(char*,int)和#x2019;[-fpermissive],c++,C++,我有一门课,那就是 class Agent{ private: .... .... int tun_alloc(char *dev, int flags); public: .... .... } int Agent::tun_alloc(char *dev, const int flags) { struct ifreq ifr; int fd, e
class Agent{
private:
....
....
int tun_alloc(char *dev, int flags);
public:
....
....
}
int Agent::tun_alloc(char *dev, const int flags) {
struct ifreq ifr;
int fd, err;
char clonedev[] = "/dev/net/tun";
if( (fd = open(clonedev , O_RDWR)) < 0 ) {
perror("Opening /dev/net/tun");
exit(1);
}
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = flags;
if (*dev) {
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
}
if( (err = ioctl(fd, TUNSETIFF, (void *)&ifr)) < 0 ) {
perror("ioctl(TUNSETIFF)");
close(fd);
exit(1);
}
strcpy(dev, ifr.ifr_name);
return fd;
}
然后没有错误,但我需要更改dev的内容。您没有提供完整的错误以及如何实际调用函数的代码,但是当您向
char*
参数提供const char*
时,可能会出现此类错误,即:
std::string s;
tun_alloc(s.c_str(),0);
c_str()
返回const char*
,因此需要:
int tun_alloc(const char *dev, int flags);
^^^^^ ~~~ !!
[编辑]
但是我需要更改dev的内容
在看到完整的源代码之后,我将用std::string&dev替换char-dev。现在您可以将字符串传递给函数,也可以从函数返回字符串。如果您想继续使用char,那么您必须将dev的长度传递给tun_alloc,并返回长度正确的错误,以防其太短。您的代码中是否有
\define dev
?您确实需要发布一个,因为到目前为止粘贴的内容没有任何错误(假设…
代表有效代码)。这是对strncpy
的错误使用;您应该先执行长度检查,然后再执行strcpy,或者使用snprintf。此建议需要修改,因为tun_-alloc
希望收到以null结尾的字符串tun_-alloc
函数将写入dev
,并且不清楚它是否可能尝试写入更长的字符串。。。
int tun_alloc(const char *dev, int flags);
^^^^^ ~~~ !!