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);
              ^^^^^ ~~~ !!