如何举一个例子来反驳使用 `==` 来比较 `const char*`
Posted
技术标签:
【中文标题】如何举一个例子来反驳使用 `==` 来比较 `const char*`【英文标题】:how to give an example to disprove the usage of `==` for comparing `const char*` 【发布时间】:2016-03-03 22:43:39 【问题描述】:基于: What is the proper function for comparing two C-style strings?
我知道 OP 是正确的。但是,我使用 g++ 4.1.2 尝试了以下操作。
#include <iostream>
using namespace std;
int main()
const char* str1 = "hello worldA";
if (str1 == "hello worldr")
std::cout << "hello world" << std::endl;
else if ( str1 == "hello worldA" )
std::cout << "hello worldA " << std::endl;
else
std::cout << "not " << std::endl;
return 0;
或
#include <iostream>
using namespace std;
int main()
const char* str1 = "hello worldA";
const char* str2 = "hello worldA";
if (str1 == str2)
std::cout << "hello world" << std::endl;
else
std::cout << "not " << std::endl;
return 0;
输出显示正确的比较结果。
问题>如何设计程序以显示==
不适用于const char*
?
谢谢
【问题讨论】:
***.com/questions/14911085/… "我如何设计一个程序以显示 == 不适用于 const char" -- 很简单。如果你知道const char *
不应该被比较,你就不要写代码来做这件事。
【参考方案1】:
#include <iostream>
#include <string.h>
using namespace std;
int main()
const char* str1 = "hello worldA";
char strbuf[] = "hello worldA";
const char* str2 = strbuf;
if (str1 == str2)
std::cout << "hello world" << std::endl;
else
std::cout << "not " << std::endl;
if (strcmp(str1, str2) == 0)
std::cout << "same contents" << std::endl;
return 0;
输出是:
不是 相同的内容
由于一个指向一个常量而另一个不是,所以指针不可能相等。如果是,*strbuf='Q';
会改变*str1
的值,显然这是错误的。
这可能是一种更好的展示方式:
#include <iostream>
#include <string.h>
using namespace std;
void compare(const char *str1, const char *str2)
if (str1 == str2)
std::cout << "== says equal" << std::endl;
else
std::cout << "== says uneqal" << std::endl;
if (strcmp(str2, str1) == 0)
std::cout << "strcmp says equal" << std::endl;
else
std::cout << "strcmp says unequal" << std::endl;
int main()
const char* str1 = "hello worldA";
char strbuf[] = "hello worldA";
compare (str1, strbuf);
return 0;
输出必须是:
== 说不平等 strcmp 表示相等
【讨论】:
您应该显式创建一个const char*
以指向str2
,以便比较两个const char*
s 而不是const char*
和char*
谢谢,现在已经改进了。【参考方案2】:
替代方案:
const char* str = "Hello\0Hello";
const char str2 = str+6;
std::cout << str << " =? " << str2
<< std::boolalpha << " : " << (str == str2);
通过将两个相同的字符串彼此相邻,我们知道它们的地址是不相等的。
【讨论】:
以上是关于如何举一个例子来反驳使用 `==` 来比较 `const char*`的主要内容,如果未能解决你的问题,请参考以下文章
举一个好例子说明java中啥情况下用过滤器,啥时候用拦截器,啥时候用侦听(没分了,但想知道真相)