关于c语言问题

在c语言中,如果定义一个字符数组,如char name[5],scanf("%s",name);printf("%s",name)这个字符组最多能接收5个字符还是4个,如果超过了会怎么样,我用的这个编译器超过了一两个也显示出来,是编译器的问题吗??

在c语言中,如果定义一个字符数组,如char name[5],,这个数组最多能存放5个字符,如果以scanf("%s",name);形式输入,这时数组变成字符串数组,由于最后一个字符是系统自动加上的字符串结束符'\0',所以最多只能输入4个字符。如果超过了,系统仍然在后面的空间写上多出的字符,也会自动增加结束符,但是,如果后面的读写内容进入内存的禁止读写区域或其他变量的存储区域,保存或读取会丢失数据,用printf("%s",name)输出时,超过了一两个有时也显示出来了,但更多时候、太长的超出量会发生数据丢失现象。这不是是编译器的问题。
只有在定义的长度之内的数据,才能保证数据的正确读写。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-02-06
char name[5]; 声明 变量 name 是一个 char 型数组,它有5个元素,可以输出:
for (i=0;i<5;i++) printf("%c",name[i]);
这个字符组最多能接收5个字符。超过了会怎么样呢?
输入语句 scanf("%s",name); 是按 name 数组 首地址的方法读入一个字符串,遇到 换行符时,从键盘拍入的内容进入 键盘输入缓冲区,并转换为一串 ASCII 字节 数值,放入从 name 数组 首地址 起始 的 一串地址。 如果 地址 &name[5], &name[6]... 没有被 其它变量占据和使用,那么 name字符串 可以使用它们 -- 这时,属于“超界占用”。
超过了会怎么样呢 ? 会 超界占用,若 超界部分 已是 别的变量 使用区,超界区的字符数值就不可靠了。当程序很小时,问题不大,程序大时,就有问题了。
通常,声明为 char name[5]; 作为字符串使用时,要自己注意,使用4个单元,最后一个单元留给 字符串结束符 '\0', 作为字符数组使用时,用到5个单元。
编译器超过了一两个也显示出来 -- 程序很小时,是可以显示的。
新的编译器,改用 scanf_s()函数,为的是 防止超界使用。
第2个回答  2019-02-06
不是编译器的问题,是你程序的问题
scanf("%s", name)
这一句 表示 输入name 的类型是字符串
你之前定义的mane长度为5没啥用了
第3个回答  2019-02-06
计算机课的时候,在XP以上的系统用win-tc,dev-cpp等IDE编译运行此程序时,无论输入什么数字,结果都是一闪而过,因为程序执行完语句后就直接退出了,当时不清楚还以为我输入的程序错了。
第4个回答  2020-12-28

C语言:通用程序设计语言

相似回答