Strcasecmp.无法解决的错误消息
strcasecmp. unsolvable error message
#include <strings.h>
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string s = "test";
if(strcasecmp(s, "TEST"))
cout << "equals"<< endl;
return 0;
}
关于如何使用strcasecmp所需的帮助,当我尝试编译时,编译器保留显示错误消息
错误:无法将'std :: string {aka std :: basic_string}'转换为" const char*",for参数'1'转换为'int strcasecmp(const char*,cont char*,const char*(
strcasecmp
采用const char*
,而不是std::string
作为参数。改用strcasecmp(s.c_str(), "TEST")
,或者首先让s
成为C风格的字符串。
strcasecmp()
函数期望指向零端的char
字符串,您无法将std::string
直接传递给它。
正确使用此操作的方法应该是:
strcasecmp(s.c_str(), "TEST")
此外,该代码在程序中看起来不正确,因为strcasecmp()
在字符串相等的情况下返回零。因此,您应该使用以下内容:
if(strcasecmp(s, "TEST") == 0)
cout << "equals"<< endl;
这意味着strcasecmp
期望C样式字符串(0
终止char[]
(而不是C string
。您可以使用s.c_str()
。
您可以尝试
strcasecmp(s.c_str(), "TEST")
strcasecmp()
功能未在C国际标准中指定。但是,strcasecmp()
是 posix.1-2001 和 4.4BSD 规格的一部分。
在cygwin下,您甚至需要附加线
#include <strings.h>
使此功能在您自己的代码中可用。
要保持您的代码便携式,我会放弃此功能并自己重建其功能:
int StringCaseCompare (const std::string& s1, const std::string& s2)
{
if ( &s1 == &s2 )
return 0;
auto iter1 = s1.cbegin();
auto iter2 = s2.cbegin();
while ( iter1 != s1.cend() )
{
if ( iter2 != s2.cend() )
{
int cmp = int(std::tolower(*iter1)) - int(std::tolower(*iter2));
if ( cmp != 0 )
return cmp;
++iter2;
}
else
return int(std::tolower(*iter1));
++iter1;
}
return -int(std::tolower(*iter2));
}
相关文章:
- C++错误消息*成员参考.**初学者*
- 如何通过参数抛出错误消息
- glad 导致 glfwSwapBuffers 返回错误消息
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 重新定义预定义的 errno 错误消息 (E2BIG)
- SDL 映像:无法打开映像,仅显示错误消息
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 错误消息"expected expression"....有人知道它为什么这么说吗?
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- GCC 警告和 gcc 错误消息之间的区别
- 为 c++ cin 上的输入数无效生成错误消息
- 来自带有mbedtls TLS的Mongoose Web服务器的错误消息
- 如何使用realsense摄像头调试ROS错误消息
- C++ 概念 - 需要括号中的概念会导致 2 条冲突的错误消息
- 编译器收到错误消息(textc.exe已停止)
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 使用 c++/WinRT Direct3D UWP Game DR 模板 Direct X11 的错误消息
- max_element() 给出非常奇怪的错误消息
- 不断收到错误消息,并非所有控制路径都返回值