错误 C3867 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_s

Posted

技术标签:

【中文标题】错误 C3867 \'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str\':非标准语法;使用 \'&\' 创建指向成员的指针【英文标题】:Error C3867 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str': non-standard syntax; use '&' to create a pointer to member错误 C3867 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str':非标准语法;使用 '&' 创建指向成员的指针 【发布时间】:2016-04-10 22:36:19 【问题描述】:

我有这段代码, 我不明白为什么它会显示此错误?

string messege = "aaa";
char tmp[50];
strcpy_s(tmp, messege.length(), messege.c_str);
char* s = NULL;
s = &(tmp[0]);

有人可以帮忙吗?

【问题讨论】:

错误在哪一行?这就是您应该重点开展初步调查的地方。 【参考方案1】:

在这一行中,您忘记了调用 c_str 后的括号:

strcpy_s(tmp, messege.length(), messege.c_str);

添加缺少的括号应该可以解决此问题。

也就是说,以这种方式混合 C 风格和 C++ 风格的字符串是不寻常的。您可能需要考虑您所做的是否合适。

【讨论】:

【参考方案2】:

c_strstd::string的成员函数,所以需要用()调用

strcpy_s(tmp, messege.length(), messege.c_str());

这将解决您的问题。

【讨论】:

以上是关于错误 C3867 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_s的主要内容,如果未能解决你的问题,请参考以下文章

Visual C++ 中的错误 C3867

如何将 COM 方法作为函数参数传递?和 Microsoft 编译器错误 C3867

FLTK 按钮回调给 c3867

错误 C3867 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_s

QtConcurrent 给出错误

C++ 结构/向量编译问题