关于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux下设置定时执行脚本「建议收藏」

    linux下设置定时执行脚本「建议收藏」linux下设置定时执行脚本1.首先安装所需程序并启动crontabs是设置周期性被执行的指令yuminstallvixie-cronyuminstallcrontabsservicecrondstartservicecrondstatus出现以下信息则表示crond启动成功●crond.service-CommandSchedulerLoaded…

    2022年7月17日
  • mysql中explain的用法_mysql substr用法

    mysql中explain的用法_mysql substr用法基于Mysql5.7版本的explain参数详解…Mysql官网相关参数解读一:idSELECT标识符1.id越大越先执行2.相同id,从从往下执行二:select_type1.SIMPLE:最简单的查询(没有关联查询没有子查询没有union的查询语句)2:PRIMARY:子查询最外层的查询语句3.SUBQUERY:子查询内层查询语句4.DERIVED:派生表查询,FROM后的不是表而是查询后的结果集5.UNION:union或unionall中的第二个以后的查询表6.U

    2022年8月31日
  • Java 泛型擦除_java中泛型的使用

    Java 泛型擦除_java中泛型的使用java泛型的残酷现实就是:在泛型代码内部,无法获得任何有关泛型参数类型的信息。在使用泛型时,任何具体的类型都被擦除,唯一知道的是你在使用一个对象。比如:List<String>和List<Integer>在运行事实上是相同的类型。他们都被擦除成他们的原生类型,即List。snippet1:1packagecom.cognizant.ch15…

    2022年9月25日
  • ubuntu下DNS服务器配置

    ubuntu下DNS服务器配置现贴一个wiki上的dns配置(非常全面,查询用)http://wiki.ubuntu.org.cn/Bind9%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97#Master_Server.EF.BC.88.E4.B8.BB.E6.9C.8D.E5.8A.A1.E5.99.A8.EF.BC.89_2进入正题:首先安装BIND套件

    2022年6月4日
  • 【译】十二因子应用(四)

    【译】十二因子应用(四)

    2021年6月17日
  • 【C++】自引用this指针的秘密

    【C++】自引用this指针的秘密关于this指针的一个经典回答当我们在进入一个房子之后,可以看见房子里的桌子、椅子、地板等,但是看不到房子的全貌。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向这个个实例。识别一个类可以分为哪三步?①识别类名。②识别数据成员。③识别成员函数并修改之。this指针的特性:①this指针的类型:类类型*const。②thi…

    2022年5月16日

发表回复

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

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