关于C语言数组的输入与输出
先摆代码:
#include<stdio.h> #include<windows.h> int main() { char a[8] ; //定义数组,不设初值 char a[8] = { "a" }; //定义数组,设置初值,这样其余为 scanf("%s", a); //第一种输入方式 int i = 0; //第二种输入方式 for (; i <= sizeof(a) - 1; i++) { char ch; if ((ch = getchar()) == 012)break; a[i] = ch; } printf("输出数组所占字节数:%d ", sizeof(a)); //输出数组所占字节数 printf("字符串实际长度:%d ", strlen(a)); //输出字符串实际长度,不包括 printf("%s ", a); //第一种输出方式 int o = 0; //第二种输出方式 for (; o <= sizeof(a) - 1; o++) putchar(a[o]); printf(" END"); //作为结尾,便于观测 Sleep(60000);//暂停一分钟,以便观察结果 return 0; }
TEST1.我们不设初值定义数组,再选择第一种输入方式,输入123,输出结果为:
输入1234567,再运行:
输入12345678,再运行:
但一分钟(即程序正常运行结束)后报错.
分析:不设初值定义数组,数组内应该没 ;第一种输入方式系统会自动在用户输入的内容后加上 .所以实际向数组内赋了9个字符的值.所以报错.
第二种输出方式会将字符数组中每一个值都输出,当输入123时,数组内为123 ????,所以会出现乱码.
TEST2.我们不设初值定义数组,再选择第二种输入方式,输入123,输出结果为:
输入1234567,再运行:
输入12345678,再运行:
程序结束后没有报错.
分析:不设初值定义数组,数组内应没 ;第二种输入方式是实打实的用户输入啥便赋予数组啥.又因为strlen(a))输出字符串实际长度时在找 ,但数组中没 ,所以显示错误的数据.同理第一种输出方式在找 没找到,所以1234567[8]后出现乱码.再说第二种输出方式,第二种输出方式会将字符数组中每一个值都输出,当输入123时,数组内为123?????,所以会出现乱码.第二种输入方式不会多加 ,所以赋了8个值,不会报错.
TEST3.我们定义数组,设初值,再选择第一种输入方式,输入123,输出结果为:
输入1234567,再运行:
输入12345678,再运行:
然后程序报错....
分析:定义数组并设初值,数组内未赋值部分会自动初始为 ;所以前两个图片都没问题.第一种输入方式系统会自动在用户输入的内容后加上 .所以实际向数组内赋了9个字符的值.所以报错.
TEST4.我们定义数组,设初值,再选择第二种输入方式,输入123,输出结果为:
输入1234567,再运行:
输入12345678,再运行:
分析:定义数组并设初值,数组内未赋值部分会自动初始为 ;所以前两个图片都没问题.第二种输入方式是实打实的用户输入啥便赋予数组啥.又因为strlen(a))输出字符串实际长度时在找 ,但数组中八个位置都被占了,没 ,所以显示错误的数据,同理第一种输出方式在找 没找到,所以12345678后出现乱码.
- 上一篇: 输出 Java 数组最简单的方式
- 下一篇: Java输出数组的内容