目前我正在尝试运行一些我从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
。任何有关此事的帮助都会受到高度赞赏
答案 0 :(得分:2)
strnlen
不是标准C ++函数。我猜你以前一直在使用其他编译器作为非标准扩展。
您需要将代码更改为不调用此函数;或提供具有类似功能的自己的功能(不称其为strnlen
)。
答案 1 :(得分:1)
我有一个类似的问题...我把这个功能放在那里
.dockerignore
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以按照以下代码段替换strnlen
strlen (s) < maxlen ? strlen (s) : maxlen
您可以访问strnlen