一个C语言数组的问题!

比如说一个数组C〔10〕,你最多可以输入并显示出来多少个元素?好像不只10个。
比如说:
#include"string.h"
main()
{
static char st1[30]="My name is ";
int st2[10];
printf("input your name:\n");
gets(st2);
strcat(st1,st2);
puts(st1);
}

我发现最多可以输入21个字符且可以得出正常结果。而st2〔10〕不是才只有10个字符吗,为什么可以储存21个字符呢?为什么22个就不正常了呢?同样我输入21个字符的话,st1[30〕最后结果有32字符,比30多!应该30个就满了呀!
我用的是TC2.0假如在别的编绎器里面是不是也是这样呢?
那么请问,比如说字符组st[20],最多还可以装多少个字符呢(除了“\0”之外)。
字符组怎么比较大小呢?比如说“dBASE”大于“C Language”怎么得来的

C语言数组不判断下标越界,下标越界的时候,可能正常,也可能导致系统崩溃

char st[20]就是分配了20个char空间给数组,当你往其中放超过20个字符的时候,程序可能出现异常,至于到底放多少个才出现异常,那要看你的程序代码和系统运行时状态
char st[20];
char stt[1024];
你往st放的字符超过20个就可能会放到stt里面去,那么你至少放1044个字符(包括'\0')可能都不会出错

比较字符串大小可以用strcmp()函数
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-17
确实是溢出了,c编译器不检查下标,只管往里面存,依。梵说的对,
字符数组比较大小是比较的ascii码 “dBASE”和“C Language”
的比较是先比较第一个字符的ascii码,如果相等在比较第二个,如果第二个
字符的ascii大于第一个的就是第一个大,反之就是第二个大
如果都相等了就是相等了
第2个回答  2009-02-17
用vc6.0编译肯定通不过的
光int st2【10】接受字符串就会编译通过
第3个回答  2009-02-17
c语言并不检查下标是否溢出...所以你的输入超过数组大小的时候编译器并不会报错...但是,这样做很危险,很危险
第4个回答  2009-02-17
…这叫缓冲区溢出…是非常不安全的…不要这样做…实际上后面的存储空间可能分配给其他用途…所以有可能产生问题
第5个回答  2009-02-17
前面那个好像是溢出,具体的不同的机器和软件会有不同的结果。主要是因为C语言对错误的检查,相对不是很严格,所以会这样的。

至于那个比较大小是根据第一个字母的,编码顺序前后来比较的,前面的比后面的大,如果第一个字母一样大,就比较第二个,以此类推就可以了!
相似回答