美文网首页
字符串使用的小误区

字符串使用的小误区

作者: Qt君 | 来源:发表于2020-01-06 00:19 被阅读0次

最近代码评审时候遇到的这些坑。

  咋一看代码貌似没什么问题,简单的字符串比较。可是仔细看了看感觉哪里不对劲,运行结果却是一直是输出"UTF-32"。这里有个误区是,字符串(char *)是不能直接比较的,下列代码比较的是字符串的地址,这样就会导致它们字符串地址永远不会相等就一直输出的是"UTF-32"结果了。

string str("gbk");
if (str.c_str() == "gbk")
    cout << "GBK";
else if (str.c_str() == "utf-8")
    cout << "UTF-8";
else if (str.c_str() == "utf-16")
    cout << "UTF-16";
else
    cout << "UTF-32";

正确做法:

  1. 直接使用string对象比较
string str("gbk");
if (str == string("gbk"))
    cout << "GBK";
else if (str == string("utf-8"))
    cout << "UTF-8";
else if (str == string("utf-16"))
    cout << "UTF-16";
else
    cout << "UTF-32";
  1. 使用strcmp函数比较字符串
string str("gbk");
if (strcmp(str.c_str(), "gbk") == 0)
    cout << "GBK";
else if (strcmp(str.c_str(), "utf-8") == 0)
    cout << "UTF-8";
else if (strcmp(str.c_str(), "utf-16") == 0)
    cout << "UTF-16";
else
    cout << "UTF-32";

  下列代码运行后直接段错误,原因是释放了一个非法的内存地址(静态存储区)。庆幸的是在C++11中,编译器会直接报错。

char *str = (char *)malloc(32);
str = "Hello world!";
free(str);

正确做法(使用strcpy复制字符串):

char *str = (char *)malloc(32);
strcpy(str, "Hello world!");
free(str);

相关文章

  • 字符串使用的小误区

    最近代码评审时候遇到的这些坑。   咋一看代码貌似没什么问题,简单的字符串比较。可是仔细看了看感觉哪里不对劲,运行...

  • 早知道这些原因,我就瘦了

    小仙女们,关于减肥这件事,小九要跟小仙女们讲讲几个常见误区! 误区一:减肥一定要节食? 很多小仙女会使用“节食”这...

  • 使用壁挂炉的9大误区,千万要记住!

    以下是小编整理的使用壁挂炉的9大误区,千万要记住!温暖健康的采暖! 误区一:长期不使用燃气壁挂炉,只关闭壁挂炉开关...

  • 使用防晒霜小心9大误区

    防晒霜是我们防晒的必备用品,但是很多人在使用防晒霜时存在很多误区,下面小编就来给大家讲讲使用防晒霜常见的9大误区。...

  • 嵌入式开发中使用C语言的常见误区

    嵌入式开发中使用C语言的常见误区 用单片机,针对的都是特定的mcu,资源非常少,而字符串处理、数据字符格式转换等函...

  • 如何开通连载?

    小误区 我们接收到不少简友的提问,他们对连载的使用简直一头雾水,甚至进入如下图的误区 可以明确告诉简友的是,连载的...

  • BEM:css的命名规范

    使用连字符('-')分隔字符串 你可能习惯了在 Javascript 中使用小驼峰的命名方式: var redBo...

  • 「Redis设计与实现」字符串篇

    字符串存储规则 redis没有默认使用c字符串,仅在字符串字面量和使用c字符串。如果字符串为变量时,则使用SDS字...

  • 006-字符串

    字符串 字符串是Python中最常用的数据类型。一般使用引号来创建字符串 使用单引号创建字符串'hello' 使用...

  • 关于信用卡的6大误区,看看你中招了吗?

    现在几乎人人都有信用卡,然而关于信用卡,很多人都存在着一些误区,今天小编就为大家列出了几个信用卡使用中的误区,看看...

网友评论

      本文标题:字符串使用的小误区

      本文链接:https://www.haomeiwen.com/subject/vtlhactx.html