在 C++ 中我们可以使用 字符数组 来代替字符串,但字符串与字符数组不是完全等价的。
字符串与字符数组的区别
1、字符串以\0结束,string s ="fsdfsd\0saf";输出的s为fsdfsd;但是字符数组没有这个要求。
2、字符串一定是一个char的数组,但char字符数组不一定是字符串。
3、数字 0(和字符 ‘\0’ 等价)结尾的 char 数组 就是一个字符串,但如果 char 数组没有以数字 0 结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的 char 数组。
字符串与字符数组的比较
当我们指定数组长度
1、如果我们定义的字符数组长度和元素个数相等,则它是一个字符数组,例如char str[5]={'g','d','f','s','g'},但把这个字符数组修改一下 char str[6]={'g','d','f','s','g'},则它表示一个字符串,因为它会自动在最后一位补上\0,当遇到数字0或\0就会结束。
2、当我们如果需要对一个字符数组转换成字符串时,需要在字符数组最后面加上一个\0,
如上图,输入会出现乱码,所以我们解决办法是在字符数组str末尾加上\0,
这种办法可能不是最好的,但也是一种解决办法。
如果不指定数组长度的情况
1、只需在数组末尾加上0即可。
字符串遇0或\0自动结束
当我们将一个元素带有\0的字符数组转换成字符串的时候,则会出现如下情况:
当我们将一个元素带有0的字符数组转换成字符串的时候,则会出现如下情况:
总结
在 C++ 中,字符串必须是以 \0
做为结尾的,但字符数组没有这个要求。字符串一定是一个 char 的数组,但 char 的数组未必是字符串。
数字 0(和字符 ‘\0’ 等价)结尾的 char 数组就是一个字符串,但如果 char 数组没有以数字 0 结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的 char 数组。
写在最后
字符串和字符数组是小菜在工作中遇到的问题,所以写出来加深自己的理解。
以上内容有参考嗨客网,详解可转至C++字符串与字符数组-C++字符串与字符串数组区别对比-嗨客网 (haicoder.net)
我们只是知识的搬运工,无任何商业行为。