- 主题:请教一个字符串的问题
最后的结束标志是需要你自己设的,不是系统自动帮你设。
a是一个内存地址而已,后面字符串有多长,其实是不确定的,如果你不手动设置结束符,可能给你打印出几百个字符
你这里刚好打印出12345,是因为5后面刚好是结束符\0,因为内存使用率比较低,内存里面大部分字节都是\0,所以一般也不会出现打印出一大串的情况
还可以引申出另一个问题:你这个a数组最大下标应该是4,但是实际上你写程序打印a[5],大概率程序也不会崩溃,因为这个字节刚好没被申请使用,这么访问并不会报错
【 在 shouge111 的大作中提到: 】
: 变量a长度是5,那么根据教材,它只能存储1234,最后一个存储单元应该存储字符串结束标志\0。
: 但是实际运行,a存储了12345.这是怎么回事呢?printf打印也是打印了12345
: #include<stdio.h>
: ...................
--
FROM 113.108.41.*
这种会自动加\0,sprintf这种函数,也会在后面加个\0
【 在 e729 的大作中提到: 】
: 哈哈,同问
: #include <stdio.h>
: int main()
: ...................
--
FROM 113.108.41.*
是的,因为内存使用率一般比较低,后面大概率是\0,刚好结果是对的
【 在 qzyanyuan 的大作中提到: 】
: 个人觉得是巧合吧,先分配5字节空间给数组然后从RO区域拷贝12345到数组缓存区 ,12345后面的值应该是一个随机值如果是刚上电 RAM区域很多地方都被清零过 \0=0h 刚好打印正常。
--
FROM 113.108.41.*