首页 > 编程知识 正文

C语言字符数组(C语言字符串给字符数组赋值)

时间:2023-05-03 22:47:34 阅读:76075 作者:2397

字符串和字符串数组字符串数组%s的问题关于字符越界和乱码问题溢出

字符串由'' 编号分配的示例:char a[]='hello '; //长度为6,最后为' '或char a[6]='hello '; 字符串自动在最后添加“”的结尾。 字符数组字符数组是一个个赋值示例。 char a[5]={'1'、'2'、'3'、'4'、'5'}; //长度为5,不会自动添加“”。 有关%s的问题%s参数必须是指针。 也就是说,需要char *类型%s字符串的格式输出。 这个一个一个地输出。 在遇到“”之前,停止在scanf (中使用%s。 最后添加' )。 在printf )中使用%s时,每次输出一个,在遇到's之前不会输出

可以看到乱码,这是为什么? 首先,我们的字符数组中没有。 另一方面,printf(s在之前不会结束。 这表明“”已越界,即乱码“口”后有“)”。 也就是说,3360(12345热蛸(0我们的想法正确吗? 请看下图

从上图可以看出,没有乱码。 这是因为scanf(%s自动在“”即5之后添加“”即12345之后添加“”,因此没有乱码。运行原理如下:

乱码'口'后真的' ' 由上我们可以看出是真的有 ’ '.

在上例中,这是否与定义时分配的空间大小无关? 无论空间是小于字符串长度还是大于字符串长度,只要最后一个printf (和puts )没有检索到两个函数“ 0”,就继续读取给定空间以外的变量。 这个变量是随机的、不可预测的,所以很多时候会变成乱码。

关于溢出,接着上面的例子:谈谈溢出

我们在a[5]中明显充满了这一点,但为什么确实能做到? 首先,数组越界不会导致编译错误! 也就是说,C、C编译器并不是判断你的代码“访问了过境”而指出的。 一个明显是错误的,就这样“顺利地”通过了编译。 当数组访问越界运行时,程序一直在运行,表现不确定,有时就像什么事也没有发生一样。 (有时程序会一下子崩溃。 因此在使用数组时,为了保证程序的正确性,必须在编程中判断是否越界。 让我们看看其他的排列。 例:整形数组、实数型数组会不会出现越界错误呢

上面的总结:再抄送中所有序列都可以越界。 可以执行,但可能带来某些奇怪问题的排列越界类似于闯红灯。 虽然不是每次都被轧,但能否依靠人品生存。 c语言不检查过境。 是否存在错误取决于重要数据是否正好写入存储的内存地址。 数组越界错误的示例如下

数组越界问题

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。