MinGW g ++`strnlen`未在此范围内声明

时间:2016-02-04 09:26:47

标签: c++ c++11 mingw

目前我正在尝试运行一些我从lynda.com收到的代码,但它正在吐出一个错误。我尝试编译的文件如下,仅包括对strnlen(strc.cpp)的调用:

#include <cstdio>
#include <cstring>
#include <memory>

#include "strc.h"

...

strc::strc() : data(nullptr) {
    msg("default ctor");
}

strc::strc(const char * s) {
    size_t slen = strnlen(s, _maxlen);
    data = new char[slen + 1];
    data[slen] = 0;
    memcpy(data, s, slen);
    msg("cstring ctor");
}

strc::strc(const strc & f) {
    size_t slen = strnlen(f.data, _maxlen);
    data = new char[slen + 1];
    data[slen] = 0;
    memcpy(data, f.data, slen);
    msg("copy ctor");
}
...

为了编译这个,我正在运行:

g++ -c strc.cpp -o strc.o -std=c++11

我尝试用cstring替换string.h,我甚至在std::前尝试了strnlen。任何有关此事的帮助都会受到高度赞赏

4 个答案:

答案 0 :(得分:2)

strnlen不是标准C ++函数。我猜你以前一直在使用其他编译器作为非标准扩展。

您需要将代码更改为不调用此函数;或提供具有类似功能的自己的功能(不称其为strnlen)。

答案 1 :(得分:1)

我有一个类似的问题...我把这个功能放在那里

.dockerignore

答案 2 :(得分:0)

strlen的正确标头是:

#include <string.h>

参考:strnlen

答案 3 :(得分:0)

您可以按照以下代码段替换strnlen
strlen (s) < maxlen ? strlen (s) : maxlen

您可以访问strnlen