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


相关推荐

  • java中保留两位小数的输出

    java中保留两位小数的输出例如平方和与倒数和,最后输出要求保留两位小数,下面这个程序的注意点已用红色字体标记importjava.text.DecimalFormat;importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){//TODOAuto-generatedmet

    2022年7月8日
    30
  • 头部公司的Robotaxi何时能拿掉安全员?

    头部公司的Robotaxi何时能拿掉安全员?今天想聊聊Robotaxi。聊这个话题的起因是今年7月上旬,汽车之心走访了上海、广州和深圳三地,深入体验了滴滴、小马智行、文远知行、元戎启行和AutoX这5家自动驾驶公司的…

    2022年5月5日
    52
  • NSGA2算法MATLAB

    NSGA2算法MATLABNSGA2算法MATLAB实现(能够自定义优化函数)以前写了一个简单的NSGA2的算法能够用在ZDT1函数上:http://www.omegaxyz.com/2017/05/04/nsga2matlabzdt1/那个NSGA2的算法不具有普遍性,下面参考课国外的课题小组的代码重新修改了内部冗余内容,使之能够自定义优化函数。更多内容访问omegaxyz.comNSGA2的过程为:

    2022年5月12日
    39
  • 渗透测试技术_Nessus工具(二) _漏洞扫描工具 Nessus的使用教程

    渗透测试技术_Nessus工具(二) _漏洞扫描工具 Nessus的使用教程漏洞扫描工具Nessus的使用教程1、Nessus使用教程1.1、Nessus登录在浏览器中访问:https://{服务器IP}:8834例如访问:https://10.1.1.191:8834/输入你注册的账号密码进行登录,例如:nessus_casb/liaxx,进入主页面。1.2、新建1个主机扫描1.2.1、点击右上角的”NewScan”新建一个扫描1.2.2、选择“BasicNetworkScan”,进行配置项目名称,对项目的描述,以及最重要的目标I.

    2022年10月18日
    3
  • mysql databus_DataBus概述

    mysql databus_DataBus概述1.概述Databus是一个低延迟、可靠的、支持事务的、保持一致性的数据变更抓取系统。由LinkedIn于2013年开源。Databus通过挖掘数据库日志的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化client实时获取变更并进行其他业务逻辑。Databus有以下特点:数据源和消费者之间的隔离。数据传输能保证顺序性和至少一次交付的高可用性。从变化流的任意时间点进行消费,包括…

    2022年10月17日
    2
  • MySQL为什么用B+树,而不用B树?

    MySQL为什么用B+树,而不用B树?

    2022年2月19日
    54

发表回复

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

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