关于C语言数组的输入与输出

先摆代码:

#include<stdio.h>
#include<windows.h>

int main()
{
	char a[8] ; //定义数组,不设初值
	char a[8] = { 'a' }; //定义数组,设置初值,这样其余为\0

	scanf("%s", a); //第一种输入方式
	int i = 0; //第二种输入方式
	for (; i <= sizeof(a) - 1; i++)
	{
		char ch;
		if ((ch = getchar()) == 012)break;
		a[i] = ch;
	}
		
	printf("输出数组所占字节数:%d\n", sizeof(a)); //输出数组所占字节数
	printf("字符串实际长度:%d\n", strlen(a)); //输出字符串实际长度,不包括\0

	printf("%s\n", a); //第一种输出方式
	int o = 0; //第二种输出方式
	for (; o <= sizeof(a) - 1; o++)
		putchar(a[o]);


	printf("\nEND"); //作为结尾,便于观测

	Sleep(60000);//暂停一分钟,以便观察结果
	return 0;
}


TEST1.我们不设初值定义数组,再选择第一种输入方式,输入123,输出结果为:


输入1234567,再运行:


输入12345678,再运行:


但一分钟(即程序正常运行结束)后报错.
分析:不设初值定义数组,数组内应该没\0;第一种输入方式系统会自动在用户输入的内容后加上\0.所以实际向数组内赋了9个字符的值.所以报错.
第二种输出方式会将字符数组中每一个值都输出,当输入123时,数组内为123\0????,所以会出现乱码.
TEST2.我们不设初值定义数组,再选择第二种输入方式,输入123,输出结果为:

输入1234567,再运行:


输入12345678,再运行:


程序结束后没有报错.
分析:不设初值定义数组,数组内应没\0;第二种输入方式是实打实的用户输入啥便赋予数组啥.又因为strlen(a))输出字符串实际长度时在找\0,但数组中没\0,所以显示错误的数据.同理第一种输出方式在找\0没找到,所以1234567[8]后出现乱码.再说第二种输出方式,第二种输出方式会将字符数组中每一个值都输出,当输入123时,数组内为123?????,所以会出现乱码.第二种输入方式不会多加\0,所以赋了8个值,不会报错.
TEST3.我们定义数组,设初值,再选择第一种输入方式,输入123,输出结果为:


输入1234567,再运行:


输入12345678,再运行:


然后程序报错....
分析:定义数组并设初值,数组内未赋值部分会自动初始为\0;所以前两个图片都没问题.第一种输入方式系统会自动在用户输入的内容后加上\0.所以实际向数组内赋了9个字符的值.所以报错.
TEST4.我们定义数组,设初值,再选择第二种输入方式,输入123,输出结果为:


输入1234567,再运行:


输入12345678,再运行:


分析:定义数组并设初值,数组内未赋值部分会自动初始为\0;所以前两个图片都没问题.第二种输入方式是实打实的用户输入啥便赋予数组啥.又因为strlen(a))输出字符串实际长度时在找\0,但数组中八个位置都被占了,没\0,所以显示错误的数据,同理第一种输出方式在找\0没找到,所以12345678后出现乱码.



  • 31
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值