网页版微信登录二维码seo实训思考与总结
web/
2025/9/30 23:58:56/
文章来源:
网页版微信登录二维码,seo实训思考与总结,百度推广效果不好怎么办,想办个网站怎么做前言
本期我们讨论字符串字面量。
这是一种基于字符串的东西#xff0c;上一章我们讲过字符串#xff0c;你一定要去先去看看那一期的内容。
P23 C字符串-CSDN博客
01 什么是字符串字常量呢#xff1f;
字符串字面量就是在双引号之间的一串字符 在上面的代码中#xf…
前言
本期我们讨论字符串字面量。
这是一种基于字符串的东西上一章我们讲过字符串你一定要去先去看看那一期的内容。
P23 C字符串-CSDN博客
01 什么是字符串字常量呢
字符串字面量就是在双引号之间的一串字符 在上面的代码中我们通过双引号定义了一个字符串字常量。
当指针悬停在“hello world0” 时会弹出下面语句
(const char [12])hello world你可以看到这是一个 const char 数组长度为12。
可是这里很明显只有11个字符那为什么 const char 数组的长度是12呢
原因是在这种情况下在字符串的最后有一个额外的字符一个空终止字符它的 ASCII 码值为 0可以写做 ‘\0’是null字符的意思表示字符串的结束。注意这和字符0完全不一样。 如果我们想在这个字符串中间插入一个 \0这样操作会破坏这个字符串的行为让我们设置个断点查看下内存 我在第五行设置了一个断点当程序运行到第六行的时候我们可以看到左边红框data hello
这是为什么呢 我们可以看到在 hello 和 world 的后面各有一个点在 ACSII 中点表示 0。它在最后标记字符串的结尾标记字符串的结尾。
如果我想看到我的字符串是什么我可以运行 C 函数 strlen计算一下这个字符串的长度看看结果。 结果是5可是明明字符串的长度不是5啊得到这个结果的原因是它只计算直到 \0 之前的字符数。因为一旦它到0它就认为是结束了这就是字符串的结尾了。
这就是它现在的样子是一个 const char* 。
我们也可以把它赋值给另一个 const char* 这完全没问题。 const 保证了你不会操纵字符串。当然如果不写 const你是可以修改其中的字符的不过我不建议你这样做这可能会导致所谓的未定义行为因为 C 标准并没有定义在这种情况下应该发生什么因此一些编译器可能会为此生成有效的代码但是你不能依赖它所以还是不要这样操作了一些编译器甚至不会让你通过编译。 未定义是不被允许的原因是你取了一个指向那个字符串的字面量的内存位置的指针而字符串字面量是存储在内存的只读部分的它是存储在二进制文件的 const 部分。当我们引用它的时候实际上指的是一个我们不能编辑的常量区域。
测试的代码
#include iostream
#include string.h
int main()
{const char * data hello\0 world;std::cout strlen(data) std::endl;std::cout data std::endl;return 0;
}
02 其他一些关于字符串的有趣的常识。
有一种叫做 wchar_t 的字符也是就是所谓的宽字符。
现在快速的过一遍这些类型。 注意如果不加那个 L是不能通过编译的。 会报下面的错误const char * 类型的值不能用于初始化 const wchar_t * 类型的实体C/C(144) 上面的例子表示引号里的字符串字面值由宽字符组成。
C 还引入了一些其它的字符比如 char16_t你需要设置为小写 u然后是双引号包含你的文本。还有 char32_t这里是大写的 U加上你的文本。 如果为了强调你也可以将普通的 const char 前面加上 u8 前缀。有一些编译器设置可以控制是使用 char 还是使用 wchar。 做一个简单的总结char 是一个字节的字符也就是utf8char16 是两个字节的16个比特的字符也就是utf16char32 是32比特4字节的字符也就是utf32。 2.1 wchar 和 char16 之间的区别是什么
因为它们似乎都是两个字节的字符。
虽然我一直在说一个字符是两个字节实际情况是这是由编译器决定的它可能是一个字节也可能是两个字节也可能是四个字节在实际应用中好像还没有见过是一个字节的通常不是2个就是4个在 windows 上是2个字节在 linux上是4个字节mac 上也是四个字节。所以这其实是一个变动的值如果你确实要的是2个字节的你就用 char16吧。
2.2 字符串附加。
在 C14 中有个 std::string_literals它给出了一些方便的字符串函数。
如果你想在这个上面附加一些其它的字符串你不能直接使用加号拼接一个字符串。因为这些都是字符串字面量它们实际上是数组或者指针所以不能将它们相加。在 C14 的 string_literals 库中有办法可以让事情变得更加简单一些。 你可以直接把字母 s 加到字符串的末尾就像下面的例子一样。 如果你把鼠标悬浮在上面可以看到它是一个操作符函数返回标准字符串对象类似的你把 u8 放在前面把 L 放在前面可以得到对应的字符串都是一样的道理。
我们还可以通过另外一种方法来附加字符串字面量使用字母 R。 R 表示可以忽略转义字符这样操作可以让这个过程变的简单了一些因为如果没有它要完成同的效果我们需要把所有的这些东西都加在一起或者我们也可以这样直接加上 \n。 这种做法还是比较常见的如果你想写一段完整的文本或者代码中的某个字符串你想简单的定义它的话就比较复杂了所以 R 还是很有用的。
好了以上就是字符串字常量。
#include iostream
#include string.h
int main()
{using namespace std::string_literals;const char * data hello\0 world;const wchar_t * data1 Lhello world;const char16_t * data2 uhello world;const char32_t * data3 Uhello world;std::string buf hellos world;const char * buf2 R(hello
world
i am
chenpi
);const char * buf3 hello\nworld;std::cout buf3 std::endl;return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84722.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!