定义的字符串数长度为五,为什么可以输入六七个字符? 为什么我定义字符数组5个字符,可是输入六个字符也可以照样输出...

作者&投稿:党肃 (若有异议请与网页底部的电邮联系)
发生了内存溢出,C语言不检查是否内存溢出,使用上要格外小心。多输入的字符存储在紧邻的栈上,在c[5]后面的存储位置,如果后面有其他变量,那其他变量会被覆盖。

scanf遇到回车才会停止 所以6和7会溢出

c语言中,定义5个长度的字符数组,输入7个字符长度的字符串,为什么不提示越界~

C语言是低级的高级语言,不会提示越界,你可以在定义5个长度呃字符数组里面输入7个字符,但是定义长度并不是没用的,编译器会专门开辟5个字符长度留给这个数组,是专用的,因此你输入7个字符后,后两个字符其实是超标领养,用了别人家的资源(可能占用了其他变量的空间),并且很容易就没娘要了(容易出错)。如果程序简单,或许出错的几率比较小,例如你只定义了这个数组的话,也不会有别的东西来干扰他,他也不会干扰别的东西,但是程序一旦复杂起来,内存空间比较拥挤,那么出错是难免的。因此有时我们要自己去实现越界提示这个功能,但是显然这样会降低程序的效率。一楼的答案也值得参考,他说的我就不说了。

import java.util.Scanner;;
public class ShuZu {

/**
* @param args
*/
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
System.out.println("输入5个字符");
String[]num;
num=new String[5];
for(int i=0;i<num.length;i++){
num[i]=reader.next();

}
for(int i=4;i>=0;i--){
System.out.println(num[i]);
}
}

}
你的数组越界了5个数组,数组下标最大为4,而数组的属性值length是等于5;那么循环实际上是从0到5所以越界了,输出也一样。

一道C语言的题目,关于字符串的长度
答:长度是7 解答:字符串的长度是指字符串中有效字符的个数.在C程序中,组成字符串的字符可以是一般的普通字符,也可以是转义字符.其中转义字符又可以用多种不同形式来表达:反斜杠字符之后接上预先规定的字符,用来表示特殊字符或特定意义的控制字符.如单引号字符,双引号字符,反斜杠字符等特殊字符,换行,回车...

字符串是什么意思
答:3、由数字字母下划线组成的一串字符叫做字符串字符串的长度是在字符串中字符的数目序列的长度,它可以是任何非负整数“空串”是在Σ上的唯一的长度为0的字符串,并被指示为ε或λ在Σ上的所有长度为n的字符串。4、字符串或串String是由零个或多个字符组成的有限序列一般记为 s=#39a1a2#8226#8226...

C语言问题,为什么这个宏定义给字符串的时候都要定义为80呢??
答:因为字符串必须以 \0 结尾 当已经输入了80个字符后,就不能再加上 \0 了 所以之所以定义大小为 81 就是为了在极限情况下也不出错。

mysql获取字符串长度函数有哪些
答:mysql字符串长度函数length: 是计算字段的长度一个汉字是算三个字符,一个数字或字母算一个字符 mysql字符串长度函数CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。对于一个包含五个二字节字符集, LENGTH()返回值为 10,而CHAR_LENGTH()的返回值为...

一个字符串没有字节怎么表示
答:NUL字节是字符串的终止符,但它本身并不是字符串的一部分,所以字符串长度并不包括NUL字节。头文件string.h包含了字符串函数所需的圆形和声明。在程序中包含这个头文件确实是个好主意,因为有了它所包含的原型,编译器可以更好地为程序执行错误检查。1.2字符串长度 字符串的长度是它所包含的字符个数,不包含NUL字节。

求字符串长度的问题(sizeof)
答:说白了,sizeof是求类型的大小,不管是表达式还是后面直接加类型;换种说法是在其后表达式在内存中占用的字节。p是char *类型,当然是4字节。你改为char p[] = "hello";这就是后面字符串的长度。或者 用strlen函数 要是规定只能用sizeof,那就这样写。int size = 0;while(*p++)size += size...

java 文件读取到的字符串和自己写的字符串为什么长度不同?求解答,不是...
答:是否是文本保存编码的问题,不是UTF-8,而是UTF-8 BOM编码。UTF-8不推荐使用无意义的BOM,但许多Windows程序却在保存UTF-8编码的文件时将其存为带BOM的格式(即在文件开头加上0xEFBBBF三个字节),这么干的就包括Windows记事本

C#中为什么要将数字字符串转化为双精度浮点数 有什么意义呢 在什么情况...
答:你说的数字字符串是字符串吧。因为它是字符串,在需要进行数值计算的时候必须转型为数值才可以进行计算。至于转为整数还是浮点数看应用的场景了。精度满足要求的话用整数也可以呀。不过要注意比如整数除整数还是得到整数,这样就会丢失精度了,这种时候就一定要转型为浮点数之类的进行计算了。

c++字符串数组问题?
答:这是C语言的范畴:根本原因是字符串不是一个基本数据类型,其真实名称应该是“字符串数组”。C语言是不能用 = 对数组进行赋值的。定义数组时候初始化使用 = , 但这里不能理解成赋值,因为这是编译器在编译的时候进行处理的。赋值预计在编译时候报错C2106(运算符的左操作数必须为左值)。因此C对于...

...ch='a+b' ; ch='\0' ; ch='7' +'5' ; ch=5+9 ;为什么?
答:ch='a+b'是错的,'a+b'不是单bai个字符,应该是个字符串,不能直接这样赋值。 '\0'是转义字符 '5'+'7'是两个字符相加,返回的也是字符 5+9是整型。但可以强制类型转化为字符,如果说这个错也有可能,因为没有强制类型转换,而应该是ch=(char)(5+9)。