关于C语言数组的输入与输出[通俗易懂]

关于C语言数组的输入与输出[通俗易懂]先摆代码:#include#includeintmain(){ chara[8];//定义数组,不设初值 chara[8]={‘a’};//定义数组,设置初值,这样其余为\0 scanf(“%s”,a);//第一种输入方式 inti=0;//第二种输入方式 for(;i<=sizeof(a)-1;i++) { char

大家好,又见面了,我是你们的朋友全栈君。

先摆代码:

#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,输出结果为:
关于C语言数组的输入与输出[通俗易懂]

输入1234567,再运行:
关于C语言数组的输入与输出[通俗易懂]

输入12345678,再运行:
关于C语言数组的输入与输出[通俗易懂]

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

输入12345678,再运行:
关于C语言数组的输入与输出[通俗易懂]

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

输入1234567,再运行:
关于C语言数组的输入与输出[通俗易懂]

输入12345678,再运行:
关于C语言数组的输入与输出[通俗易懂]

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

输入1234567,再运行:
关于C语言数组的输入与输出[通俗易懂]

输入12345678,再运行:
关于C语言数组的输入与输出[通俗易懂]

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157546.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [Android 源码] Android源码下载「建议收藏」

    [Android 源码] Android源码下载「建议收藏」Android源码下载为了能够顺利的下载Android的源码,同时也为了避免在网络上再次搜寻如何下载源码的麻烦,我把下载过程记录在这篇文档中。官网中也有详细的介绍:http://source.andr

    2022年8月5日
    2
  • Java注释@interface的用法

    Java注释@interface的用法java用@interfaceAnnotation{} 定义一个注解@Annotation,一个注解是一个类@Override,@Deprecated,@SuppressWarni

    2022年7月4日
    20
  • PyQuery常用用法总结

    PyQuery常用用法总结什么是PyQueryPyQuery是一个类似于jQuery的解析网页工具,使用lxml操作xml和html文档,它的语法和jQuery很像。和XPATH,BeautifulSoup比起来,PyQuery更加灵活,提供增加节点的class信息,移除某个节点,提取文本信息等功能。初始化PyQuery对象html文档的所有操作都需要PyQuery对象来完成,初始化PyQuery对象主要有三种方式…

    2022年5月20日
    36
  • 韦根36协议_韦根26协议

    韦根36协议_韦根26协议)ID[5]=DM;}RcvWG[0]=0;RcvWG[1]=0;RcvWG[2]=0;RcvEven=0;RcvOdd=0;CheckEven=0;CheckOdd=1;temp=0;Rcnt=0;RWGcnt=0;RCVOK=1;}}if(RCVOK)//读卡成功后,延时,再开始读下一次{EX0=0;for(i=200;i>0;i–)delay();EX0=1;}if(ClrDo…

    2025年5月31日
    0
  • adb操作命令详解及大全

    adb操作命令详解及大全adb是什么?:adb的全称为AndroidDebugBridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听SocketTCP5554等端口的方式让ID

    2022年6月12日
    26
  • -‘0’是什么意思_c语言中a是什么意思

    -‘0’是什么意思_c语言中a是什么意思是c语言中的位运算符:取反.0在内存中的存储方式是所有位为0,0000000000000000那么按位取反后位16个1(如果整形在你的机器上站16位),那么表示的数为-1.转载于:https://www.cnblogs.com/reality-soul/p/6141519.html…

    2022年9月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号