请问字符数组用大括号赋值与用双引号赋值有何不同?

Chirive 2012-01-11 12:53:56

#include<iostream>
#include"string.h"
using namespace std;
int main()
{
char a[10]={'r','s','a','s','r','w','q','e','w','q'};
//char a[9]="abcde";
cout<<strlen(a)<<endl;
//char b[9]="abcde";
char b[10]={'r','s','a','s','r','w','q','e','w','q'};
cout<<strlen(b)<<endl;
cout<<strcmp(a,b)<<endl;
return 0;
}


输出结果的strlen(a)等于20,为什么?
...全文
3386 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ivers0n 的回复:]
没结束符
[/Quote]
非也,你用双引号赋值,如果数组大小还限定为10,一样没有结束符

如果数组大小定大些,大括号赋值没有明文指定的位置,都会自动清零

本质的区别是大括号复制更灵活,双引号赋值更简单

大括号赋值可以填入任意字符
IVERS0N 2012-01-11
  • 打赏
  • 举报
回复 1
没结束符
jackyjkchen 2012-01-11
  • 打赏
  • 举报
回复
嗯,是我糊涂了
Chirive 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackyjkchen 的回复:]

引用 1 楼 ivers0n 的回复:
没结束符

非也,你用双引号赋值,如果数组大小还限定为10,一样没有结束符

如果数组大小定大些,大括号赋值没有明文指定的位置,都会自动清零

本质的区别是大括号复制更灵活,双引号赋值更简单

大括号赋值可以填入任意字符
[/Quote]
我用双引号赋值,哦不,初始化,数组大小还是10,但双引号里最多只能有9个字符,10个字符时会报错:字符串过长。由此推断,最后一位似乎应该是结束符
赵4老师 2012-01-11
  • 打赏
  • 举报
回复
首先,这不是赋值,这是初始化。赋值和初始化不是一回事。
其次,不同之处就在于双引号末尾会自动加0
destinyC 2012-01-11
  • 打赏
  • 举报
回复
1 2 3楼up
ichenfang163 2012-01-11
  • 打赏
  • 举报
回复
真实好东西呀!
weilandeyekong 2012-01-11
  • 打赏
  • 举报
回复
1. strlen(a)输出的结果不一定是20,也可能是其他的值
strlen的参数是一个字符串,不是字符数组,它遇到字符串结束标识符就会返回,但是char a[10]={'r','s','a','s','r','w','q','e','w','q'};中并没有结束标识符,所以这个数会是一个随机的数,不一定是20,如果想要strlen(a)返回10,则需要进行如下的改动:char a[11]={'r','s','a','s','r','w','q','e','w','q','\0'};
2. 使用大括号的方式对字符数组赋值,在末尾是不会有字符串的结束标识符的,确切的说只是一些列的字符;使用双引号括起来的一系列字符成为字符串,字符串是自动添加字符串结束标识符的
jackyjkchen 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ivers0n 的回复:]
没结束符
[/Quote]
呵呵,没看见楼主还问了一句,针对他问的那一句回答的话,你是对的
二、Vue的数据驱动---mvvm模式的介绍 Vue是一款轻量级的渐进式前端框架,主要功能: 1、模板渲染/数据同步 2、组件化、模块化 3、扩展功能:路由 等等 Vue资源: 中文官网:https://cn.vuejs.org/ Github源码:https://github.com/vuejs/vue MVVM: M:Model数据模型 负责数据存储 V:View视图 负责页面的显示 VM:View Model负责业务处理,对数据进行加工,之后交给视图 Vue1 下载地址:http://v1-cn.vuejs.org/js/vue.js Vue2 下载地址:https://unpkg.com/vue@2.2.1/dist/vue.js 三、Vue常见指令介绍上 1、插值表达式 {{}} 当模型中的数据发生改变时,那么视图中的数据也对应的发生改变。 2、v-text 将一个变量的值渲染到指定的元素中 3、v-html 可以真正输出html元素 4、v-model 实现双向数据绑定 5、v-build 绑定页面中元素的属性 6、v-if和v-show v-if 作用:判断是否加载固定的内容,如果是真,就加载,如果是假,就不加载; 语法:v-if='判断表达式' v-show 作用:判断是否显示内容 语法:v-show='判断表达式' v-if和v-show的相同点和不同点 1.相同点:都可以实现对于一个元素的显示与隐藏操作 2.不同点:v-if是将元素添加或移出dom树模型中,v-show只是在这个属性上添加display:none而已。 3.v-if有更高的切换小号,安全性高。v-show初始化消耗大点。所以,如果需要频繁切换并对安全性没有要求时, 可以用v-show。如果在运行时,条件不可能改变的话,使用v-if更好点。 7、v-for 作用:控制html元素中的循环 语法:v-for="item in 集合" 8、v-on 作用:对页面中的事件进行绑定 语法:v-on:事件类型 = '监听器' 缩写@事件类型='监听器' 四、Vue常用的组件使用 组件是vue.js中一个非常强大的功能,可以扩展HTML元素,封装可重用的代码。 1、将组件内容定义到template模板中 2、组件中实现指令以及事件绑定 五、组件间的传值 1、父组件传值给子组件 2、子组件传值给父组件 六、Vue-router路由的基本使用上 在一个系统或App中,由多个页面组成,通常会使用vue中的组件来实现,那么从一个页面跳转到另一个页面时, 通过url路径来实现的,哪个url对应哪个页面,在vue中是通过vue-router来实现 Vue-router在vue2.0中的使用、 配合vue1.0使用的版本的帮助文档地址: https://github.com/vuejs/vue-router/tree/1.0/docs/zh-cn 配合vue1.0使用的vue-router下载地址: https://cdnjs.doubflare.com/ajax/libs/vue-router/0.7.10/vue-router.min.js 配合vue2.0使用的版本的帮助文档地址:http://router.vuejs.org/zh-cn/installation.html 配合vue2.0使用的vue-router下载地址:https://unpkg.com/vue-router/dist/vue-router.js 七、路由的传值 vue2.0的路由参数定义实现url的传值 八、ECMAScript6 九、let使用 let是申明变量的关键字 1、在相同的作用域内,let不能重复申明一个变量 2、let申明的变量不会被预解析 3、暂时性死区(变量在let声明前都不能访问,为了防止先调用后声明这个现象) 十、let与for的使用 1.块级作用域 let声明的变量拥有块级作用域,块级作用域是一对大括号 块级作用域可以直接些一堆大括号,以后就不用写自执行函数了 2.var与for循环 3.let与for循环 十一、const的用法 const声明一个常量,一旦声明后就不能修改了 1.如果声明后再去修改的话就会报错 2.只声明不赋值也会报错 3.只能先声明后使用,不会被提前解析 4.不能重复声明一个常量 注意:const声明的对象中属性是可以修改的 十二、结构赋值-数组 结构赋值 按照一定的模式,从数组或者对象中把数据拿出来,对变量进行赋值 数组结构赋值 等号左边与右边必须都是数组,数组的结构赋值要一一对应。如果对应不上的话就是undefind 十三、对象结构赋值 对象结构赋值 等号左边与右边必须都是对象,名字要一一对应,顺序不需要对应,对应不上的值结果是undefind 十四、字符串模板 1.字符串需要用一堆反引号包裹起来,它可以定义多行字符串,只用一堆反引号 2.要拼进去的数据需要放在${}里面 3.大括号里面还可以进行运算 4.大括号里面可以调用函数 十五、箭头函数 语法: 1.function用var、let、const来表示 2.参数要卸载第一个等号后面 a.如果没有参数,需要写一堆空的小括号 b.只有一个参数,那就直接写,不用加括号 c.参数有多个,需要加一个小括号,参数用逗号隔开 3.函数的主题内容是放箭头后面, 如果语句只有一条,那就直接写; 如果语句有多条,需要把他们放在一堆大括号里 。 十六、rest参数 rest参数 ...变量名 rest参数是一个数组,他的后面不能再有参数,不然会报错 扩展方法... 1.三个点后面是一个类数组,它的作用是把这个类数组转成真正的数组,但是它需要放到一对中括号里面 2.三个点后面是一个真正的数组,它的作用是把数组转成一个普通集合数据,不需要加中括号 十七、Symbol介绍 新增的第7中数据类型,表示独一无二。用来作为属性名,能保证不会与其他的属性名冲突 1.它是通过Symbol函数生成的 2.它的前面不能用new,因为它生成的是一个原始类型的数据,不是对象 3.它可以接受一个参数,为了便于区别。及时长的一样他们也不同 4.它不能与其他的值进行运算,没有隐式转换 5.它的值可以被转换成布尔值或字符串,不能转换成数字 十八、set数据结构 set数据结构,类似数组,所有的数据都是唯一的,没有重复的值。它本身是一个构造函数 size数据长度 add()添加一个数据 delete()删除一个数据 has()查找某条数据,返回一个布尔值 clear()删除所有数据 十九、map数据结构 map数据结构,类似于对象。键值对的集合,所有输一局都是唯一的,不会重复。每条数据都需要放在一个数组中 它本身就是一个构造函数 size()数据的长度 set()添加一条数据 delete()删除一条数据 get()获取一条数据 has()查找某条数据,返回一个布尔值 clear()删除所有数据 二十:教学视频

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧