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


相关推荐

  • /etc/ssh/sshd_config 关建字:PermitRootLogin no  禁示以root身份登录服务器

    /etc/ssh/sshd_config 关建字:PermitRootLogin no  禁示以root身份登录服务器这种情况,不会影响,普通用户su到root

    2022年5月10日
    37
  • 学习Java的9张思维导图

    学习Java的9张思维导图红包网上搜集了java的学习思维导图,分享给大家。01.Java程序设计(基础)02.Java程序设计(专题)03.客户端网页编程04.JavaWeb表示层技术05.Oracle06.Hibernate07.MyBATIS08.Spring还有一幅java基础知识思维导图:具体忘记从哪里找到的这么好的资料,谢谢原作者…

    2022年5月16日
    50
  • goland最新激活码[最新免费获取]

    (goland最新激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    46
  • springboot(16)Spring Boot使用单元测试[通俗易懂]

    转载自嘟嘟独立博客本文链接地址:SpringBoot干货系列:(十二)SpringBoot使用单元测试前言这次来介绍下SpringBoot中对单元测试的整合使用,本篇会通过以下4点来介绍,基本满足日常需求Service层单元测试Controller层单元测试新断言assertThat使用单元测试的回滚正文SpringBoot中引入单元测试很简单,依赖…

    2022年4月13日
    101
  • 史上最详细Git使用教程[通俗易懂]

    史上最详细Git使用教程[通俗易懂]本篇为廖雪峰老师官方网站中Git教程的学习笔记Git是世界上最先进的分布式版本控制系统,克隆一个项目的速度非常快每个开发都可以从master上克隆一个本地版本库,就算没有网络,也可以提交代码到本地仓库、查看log、创建项目分支等等每个版本库都可以创建无限个分支,分支是个完整的目录,且这个目录拥有完整的实际文件一、安装网上搜一下安装教程,这里就不介绍了安装完成后,在开始菜单里…

    2022年4月30日
    74
  • phpstorm2021 通过 github 激活破解方法

    phpstorm2021 通过 github 激活破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    98

发表回复

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

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