C语言数组与gets puts问题
本帖最后由 kukude_xiaoliu 于 2020-7-22 21:07 编辑如图,为什么数组长度不够装,但是还能够输出呢?{:5_94:}
#include<stdio.h>
#include<stdbool.h>
int main()
{
char old_char;
printf("请输入要转换的字母:");
gets(old_char);
puts(old_char);
}http://www.kupan123.com/upload/1595423250x-1404755112.png 1. 数组越界
2. 'n' 后面的内存单元中保存的数据正好是 0
这属于C语言的缺陷了,对于越界数组没有效的防范方案,在标准中数组越界行为也是未定义的。
理论上越界会使得程序崩溃,属于一个潜在的风险;
(因为会让后续的内存数据紊乱,你可以就这个程序或把这里的代码插入其他程序;写入很长的数据进行测试,会测试到发生崩溃的)
建议用return 0;作判断标准
/************************************************************************************/
gets(char* Str);//将stdin的输入读取的字符放到Str所在的地址单元,以回车或EOF作为终止读取标志并将终止标志转'\0'。只要不按下回车,可无限读取
puts(const char* Str);//将Str所在的地址上的字符串输出到屏幕,直到遇到'\0'。并将'字符串末尾的\0'换成换行符
页:
[1]