错误 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_str
是std::string
的成员函数,所以需要用()
调用
strcpy_s(tmp, messege.length(), messege.c_str());
这将解决您的问题。
【讨论】:
以上是关于错误 C3867 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_s的主要内容,如果未能解决你的问题,请参考以下文章
如何将 COM 方法作为函数参数传递?和 Microsoft 编译器错误 C3867
错误 C3867 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_s