程序如下: #include<stdio.h>
int main()
{
char c[5],b[5];
int i;
for(i=0;i<10;i++)
{
c[i]=getchar();
getchar();
b[i]=getchar();
getchar();
}
printf{“c[5]=%s”,c);
printf("\n");
printf{“b[5]=%s”,b);
printf("\n");
return 0;
}
运行后输入: a
b
c
d
e
f
g
h
i
j
执行后结果:c[5]=acegic
b[5]=bdfhj 本以为输入错误,结果多次运行结果一样
问题就在于c[5]的最后一个值c是怎么来的啊
还有谁能顺便说下怎么插入本地图片啊
30 个解决方案
#1
不知道哦~~~~~
#2
越界了,出现期望中的结果是有可能的,也有可能出现其它结果。
环境能保证你的代码在“良好”的时候,有“预料中”的结果。
但是并不是说在代码“差”的时候,结果就不在预料中了。
当“差”代码的结果在预料中的时候,不要试图为这个作出解释,一切皆有可能。
你需要记住的是:写好的代码。
环境能保证你的代码在“良好”的时候,有“预料中”的结果。
但是并不是说在代码“差”的时候,结果就不在预料中了。
当“差”代码的结果在预料中的时候,不要试图为这个作出解释,一切皆有可能。
你需要记住的是:写好的代码。
#3
越界。。。
#4
我晕 数组越界
#5
每次运行不是重新非配地址吗,为何c[5]后每次都是c,而不是其他的,b[5]为何没有类似情况呢
#6
别去解释。。。
一定要解释的话,就是在特定环境,指定环境,由于某些原因,导致了这个。
但是并不能保证你环境变了,还有这些。
#7
因为没空字符结尾,而且你的数据不能够全部被放入到数组中作为字符串,而是作为了字符,我最近也是碰到了这样类似的问题,我也用数据做了几次测试:
发现输入的数据<=数组的长度*2,否则就出现了错误,至于原因,应该就是大于了2*数组长度了,导致数据不能被存放,也就是越界了。
输出也只能是2*数组长度大小的字符。
发现输入的数据<=数组的长度*2,否则就出现了错误,至于原因,应该就是大于了2*数组长度了,导致数据不能被存放,也就是越界了。
输出也只能是2*数组长度大小的字符。
#8
越界。。。。到了c的范围外面。。。
#9
= =我看不懂你这个循环是什么意思
#10
scanf 有个缓存处理不了回车的问题,一般用fflush解决,这里用一个空的getchar把回车读取
#11
那你们说的越界是什么意思?我自己脑子运行的是没有最后那个c的
#12
越界就是c[4]范围应该是从c开始四个int型长度的范围,但是他读出的时候没有'\0'或者NULL、EOF标志,就沿着地址继续读下去了,就超出c[]的范围了
其实他的程序理论上应该输入20个字符的,我也不知道他怎么弄的
#13
很明显 楼上越界了 没什么关系啦 新手 以后会好的
#14
这代码写的,楼主还是重新实现一下吧~
#15
为什么说应该要输入20个呢,定义的是数组大小是5啊,2个数组不是输入10个吗,能说说嘛
#16
程序语法和逻辑都没问题,就是最后的输出方式不对,a b都是字符数组, 不是字符串,不能用%s输出,你知道\0在哪里呢?前五个字符不是都正常输出了嘛,后面输出什么都可能。
#17
你的循环是i<10,一个循环是输入两次,,,,,,
我觉得还是推翻重来比较好。。。这个问题还是蛮多的。。。
建议你在格式、风格上能有一些“标准化”
the elements of c++ style 可以看看,我其实以前比你还乱,现在在努力改正!
加油吧!
#18
感觉怎么跟以前的我一样专牛角尖...
#19
谢谢大家了,祝新年快乐
#20
越界。。。。到了c的范围外面。。。
#21
一经3L提醒 我才发现
这里越界了
printf{“c[5]=%s”,c);
printf("\n");
printf{“b[5]=%s”,b);
printf("\n");
这里越界了
#22
当printf()的格式字符串是%S时,打印直到遇到'\0',结束
楼主在打印前stop,查看数组中的内容
楼主在打印前stop,查看数组中的内容
#23
你要存5个字符就定义长度为6个的字符数组,系统会自动在最后给你加个\0 或者输出时用%c
#24
#25
字符串后面应该有'\0'字符结束。
#26
要不自己用gdb调试看看
#27
vc下执行的,C怎么来的我也不知道,我也不想纠结于此了。先跳过,继续学习,以后可能会理解的。
#include<stdio.h>
int main()
{
char c[5],b[5];
int i;
for(i=0;i<5;i++)
{
c[i]=getchar();
getchar();
b[i]=getchar();
getchar();
}
c[6]=b[6]='\0';
printf("c[5]=%s",c);
printf("\n");
printf("b[5]=%s",b);
printf("\n");
return 0;
}
#include<stdio.h>
int main()
{
char c[5],b[5];
int i;
for(i=0;i<5;i++)
{
c[i]=getchar();
getchar();
b[i]=getchar();
getchar();
}
c[6]=b[6]='\0';
printf("c[5]=%s",c);
printf("\n");
printf("b[5]=%s",b);
printf("\n");
return 0;
}
#28
数组的长度只有5,却用c[6]=b[6]='\0';,这都6了,怎么可能对
#29
晕,越界了,上限都是4
#30
基础不雄
#1
不知道哦~~~~~
#2
越界了,出现期望中的结果是有可能的,也有可能出现其它结果。
环境能保证你的代码在“良好”的时候,有“预料中”的结果。
但是并不是说在代码“差”的时候,结果就不在预料中了。
当“差”代码的结果在预料中的时候,不要试图为这个作出解释,一切皆有可能。
你需要记住的是:写好的代码。
环境能保证你的代码在“良好”的时候,有“预料中”的结果。
但是并不是说在代码“差”的时候,结果就不在预料中了。
当“差”代码的结果在预料中的时候,不要试图为这个作出解释,一切皆有可能。
你需要记住的是:写好的代码。
#3
越界。。。
#4
我晕 数组越界
#5
每次运行不是重新非配地址吗,为何c[5]后每次都是c,而不是其他的,b[5]为何没有类似情况呢
#6
别去解释。。。
一定要解释的话,就是在特定环境,指定环境,由于某些原因,导致了这个。
但是并不能保证你环境变了,还有这些。
#7
因为没空字符结尾,而且你的数据不能够全部被放入到数组中作为字符串,而是作为了字符,我最近也是碰到了这样类似的问题,我也用数据做了几次测试:
发现输入的数据<=数组的长度*2,否则就出现了错误,至于原因,应该就是大于了2*数组长度了,导致数据不能被存放,也就是越界了。
输出也只能是2*数组长度大小的字符。
发现输入的数据<=数组的长度*2,否则就出现了错误,至于原因,应该就是大于了2*数组长度了,导致数据不能被存放,也就是越界了。
输出也只能是2*数组长度大小的字符。
#8
越界。。。。到了c的范围外面。。。
#9
= =我看不懂你这个循环是什么意思
#10
scanf 有个缓存处理不了回车的问题,一般用fflush解决,这里用一个空的getchar把回车读取
#11
那你们说的越界是什么意思?我自己脑子运行的是没有最后那个c的
#12
越界就是c[4]范围应该是从c开始四个int型长度的范围,但是他读出的时候没有'\0'或者NULL、EOF标志,就沿着地址继续读下去了,就超出c[]的范围了
其实他的程序理论上应该输入20个字符的,我也不知道他怎么弄的
#13
很明显 楼上越界了 没什么关系啦 新手 以后会好的
#14
这代码写的,楼主还是重新实现一下吧~
#15
为什么说应该要输入20个呢,定义的是数组大小是5啊,2个数组不是输入10个吗,能说说嘛
#16
程序语法和逻辑都没问题,就是最后的输出方式不对,a b都是字符数组, 不是字符串,不能用%s输出,你知道\0在哪里呢?前五个字符不是都正常输出了嘛,后面输出什么都可能。
#17
你的循环是i<10,一个循环是输入两次,,,,,,
我觉得还是推翻重来比较好。。。这个问题还是蛮多的。。。
建议你在格式、风格上能有一些“标准化”
the elements of c++ style 可以看看,我其实以前比你还乱,现在在努力改正!
加油吧!
#18
感觉怎么跟以前的我一样专牛角尖...
#19
谢谢大家了,祝新年快乐
#20
越界。。。。到了c的范围外面。。。
#21
一经3L提醒 我才发现
这里越界了
printf{“c[5]=%s”,c);
printf("\n");
printf{“b[5]=%s”,b);
printf("\n");
这里越界了
#22
当printf()的格式字符串是%S时,打印直到遇到'\0',结束
楼主在打印前stop,查看数组中的内容
楼主在打印前stop,查看数组中的内容
#23
你要存5个字符就定义长度为6个的字符数组,系统会自动在最后给你加个\0 或者输出时用%c
#24
#25
字符串后面应该有'\0'字符结束。
#26
要不自己用gdb调试看看
#27
vc下执行的,C怎么来的我也不知道,我也不想纠结于此了。先跳过,继续学习,以后可能会理解的。
#include<stdio.h>
int main()
{
char c[5],b[5];
int i;
for(i=0;i<5;i++)
{
c[i]=getchar();
getchar();
b[i]=getchar();
getchar();
}
c[6]=b[6]='\0';
printf("c[5]=%s",c);
printf("\n");
printf("b[5]=%s",b);
printf("\n");
return 0;
}
#include<stdio.h>
int main()
{
char c[5],b[5];
int i;
for(i=0;i<5;i++)
{
c[i]=getchar();
getchar();
b[i]=getchar();
getchar();
}
c[6]=b[6]='\0';
printf("c[5]=%s",c);
printf("\n");
printf("b[5]=%s",b);
printf("\n");
return 0;
}
#28
数组的长度只有5,却用c[6]=b[6]='\0';,这都6了,怎么可能对
#29
晕,越界了,上限都是4
#30
基础不雄