未在此范围内声明 MinGW g++ `strnlen`
MinGW g++ `strnlen` was not declared in this scope
目前我正在尝试 运行 我从 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");
}
...
编译这个我是 运行ning:
g++ -c strc.cpp -o strc.o -std=c++11
我试过用 string.h
替换 cstring
,我什至试过但是 std::
在 strnlen
前面。在此问题上的任何帮助将不胜感激
strnlen
不是标准 C++ 函数。我猜您以前一直在使用其他一些编译器,这些编译器将此作为非标准扩展提供。
您需要更改代码以不调用此函数;或提供您自己的具有类似功能的函数(不调用它 strnlen
)。
strlen 的正确 header 是:
#include <string.h>
参考:strnlen
您可以通过以下代码片段
替换 strnlen
strlen (s) < maxlen ? strlen (s) : maxlen
你可以参考strnlen
我有类似的问题...我把这个函数放在那里
static size_t strnlen(const char* s,size_t maxlen) {
for (size_t i=0; i < maxlen ; i++ ){
if (s[i] == '[=10=]')
return i;
}
return maxlen;
}
目前我正在尝试 运行 我从 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");
}
...
编译这个我是 运行ning:
g++ -c strc.cpp -o strc.o -std=c++11
我试过用 string.h
替换 cstring
,我什至试过但是 std::
在 strnlen
前面。在此问题上的任何帮助将不胜感激
strnlen
不是标准 C++ 函数。我猜您以前一直在使用其他一些编译器,这些编译器将此作为非标准扩展提供。
您需要更改代码以不调用此函数;或提供您自己的具有类似功能的函数(不调用它 strnlen
)。
strlen 的正确 header 是:
#include <string.h>
参考:strnlen
您可以通过以下代码片段
替换 strnlen
strlen (s) < maxlen ? strlen (s) : maxlen
你可以参考strnlen
我有类似的问题...我把这个函数放在那里
static size_t strnlen(const char* s,size_t maxlen) {
for (size_t i=0; i < maxlen ; i++ ){
if (s[i] == '[=10=]')
return i;
}
return maxlen;
}