C++结构体存储的同内容char*字符串相等判断返回false原因求解
原因说明
你遇到的问题本质是char*类型的比较规则问题:直接对char*使用==/!=运算符,比较的是指针存储的内存地址值,而非指针指向的字符串内容。
- 打印
suffixes[12].suff和suffixes[13].suff都输出'T',仅能证明两个指针指向的内存地址中存储的首字符为'T',不能证明两个指针本身的地址值相等,也不能证明两个指针指向的完整字符串内容完全一致。 - 只要两个
char*指向不同的内存地址,哪怕地址中存储的字符串内容完全相同,直接比较指针的结果也会是不相等。
解决方案
C风格字符串比较
使用标准库的strcmp函数做内容比较:
当strcmp(a, b)返回值为0时,代表两个C风格字符串内容完全一致,对应你的判断逻辑应该改写为:
if (strcmp(suffixes[12].suff, suffixes[13].suff) != 0) { // 内容不相等时的逻辑 cout << "ok"; }
C++更推荐的写法
直接用std::string类型存储后缀字符串,std::string重载了==/!=运算符,可以直接比较内容,同时也能避免C风格字符串常见的内存泄漏、野指针、越界等问题。
内容的提问来源于stack exchange,提问作者myk137
相关产品推荐
相关产品推荐

