C语言输入输出字符串

charch[5];scanf("%s",ch);printf("%s",ch);我在学习视频中看到这么一句话用来输入输出一个字符串。按我的理解ch[5]的作用是把字符串... char ch[5];
scanf("%s",ch);
printf("%s",ch);
我在学习视频中看到这么一句话用来输入输出一个字符串。按我的理解ch[5]的作用是把字符串的长度限定在5个字节里,但是实际操作发现我的字符串无论输入的多长多短,都是输入的什么输出的就是什么。但是当我把5去掉,变成char ch;或者char ch[];都会出错无法运行。改成1的话,也还是输入的什么输出的就是什么。所以求问这个5,或者说数字到底有什么用。如果我想要限定输出字符串的长度,应该怎么操作。
展开
 我来答
qscorpius_fly
2014-06-27 · TA获得超过1860个赞
知道小有建树答主
回答量:811
采纳率:80%
帮助的人:314万
展开全部
char ch[5]表示的是定义了一个字符数组(即字符串),数组单元有5个,每个单元都是字符型,由于字符串是用\0作结束的,5个单元的字符数组实际上能完整存储的只能是长度不超过4个字符的字符串,多了的话就要占用其他单元了(这些单元有可能会被系统分配给其他变量,而能够用来存储字符串的就是你定义的这5个单元的字符数组),可能会出现溢出,也就是有时候会出现输出的字符串后面有乱码
char ch表示定义了一个字符变量,用scanf为其赋值的话应该用%c,即scanf("%c",&ch),它只能表示一个字符
char ch[]数组定义不允许[]里为空
char ch[1]表示的也是一个字符数组,所以你可以输入字符串,同样随便输入就有可能溢出
追问
我试了试溢出范围,根据我的测试,字节数最多到28,超过28运行就会崩溃,为什么是28?
追答

给你设计了个程序便于更好的理解这个问题:

#include <stdio.h>
int main()
{
int a[10];//定义一个整型数组 
char ch[5];//定义一个字符串 
int i;//定义一个循环变量 
printf("字符串ch的起始地址=%d\n\n",ch);//输出字符串ch的起始地址 
printf("整型数组a的起始地址=%d\n\n",a);//输出整型数组a的起始地址 
printf("请输入字符串ch=");
scanf("%s",ch);//输入字符串 
for(i=0;i<10;i++)//通过一个循环自动为整型数组a赋值为0 1 2 3 4 5 6 7 8 9 
a[i]=i;
printf("输入的字符串ch=%s\n\n",ch);//输出字符串ch
printf("数组a的值为="); 
for(i=0;i<10;i++)//通过一个循环输出整型数组a的值 
printf("%4d",a[i]);
printf("\n\n");
return 0;
}

程序的运行结果:

这里系统为一个数组最短分配了16个字节的空间,但这是不一定的,不同系统可能是不同的,你说的28这也是不确定的,这需要看操作系统对内存管理的策略了,因此在编程的时候尽量不要出现数组溢出的情况,否则会导致程序的输出不确定或是错误的情况

风若远去何人留
2015-10-10 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450126
专业C/C++软件开发

向TA提问 私信TA
展开全部
在C语言中,输入输出字符串有以下两种方式:
1 用scanf/printf输入输出。
scanf/printf是C语言的格式化输入输出函数,可以用于输入输出各种基础类型,字符串(char*)也在其支持范围内。
格式化字符为%s。
定义
char str[100];
输入
scanf("%s",str);
输出
printf("%s",str);

2 C语言还支持专门的字符串输入输出函数:gets/puts。
gets的作用为,读入一行输入,并将读到的换行符替换为字符串结束符。
puts的作用为,将字符串单行输出,即输出字符串内容后,会自动在结尾增加换行。
定义
char str[100];
输入
gets(str);
输出
puts(str);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
caijing1027
2014-06-27 · TA获得超过2004个赞
知道小有建树答主
回答量:343
采纳率:0%
帮助的人:252万
展开全部
解答:
ch [5}是说你已经声明了五个字符数组,你说的输入什么后又输出什么,是因为你都储存在地址为ch[0]即第一个字符数组里面。
你声明char ch;char ch[],只是申明数组的名字,比没有数组的大小,所以计算机无法执行,就像你申请一个人户口,你只告诉别人名字,不告诉别人你申请人性别,别人依然不会为你办户口一样。呵呵,一个比方啦。
如果你要限制字符串的长度,大可以每个数组里储存一个字符,这样就可以控制啦。
谢谢,希望能帮到你啦!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a876480423
2014-06-27 · 超过72用户采纳过TA的回答
知道答主
回答量:129
采纳率:0%
帮助的人:134万
展开全部
puts()和gets()都是数组函数,输入或输出前要定义数组
例如:
char a[50];
gets(a);
puts(a);
就是一个简单的输入后再将输入的东西输出,puts()的输入和printf的输出是有一定的区别的,puts()遇到‘\0'就终止,而用printf则不会这样。
例如:
char a[50];
gets(a);
puts(a);
printf("%s",a);
如果正好输入50个字符,则两次输出一致。但如果输入字符不足50个,puts()输出输入的全部字符,而没有输入的不输出,而printf则不能识别'\0',所以会出现乱码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
warden_alpha
2014-06-27 · TA获得超过529个赞
知道小有建树答主
回答量:559
采纳率:0%
帮助的人:132万
展开全部
首先,你的理解没有错,char就是一个字符的声明方式.ch[5]就是5个字符.
其次char ch这种声明是没错的.
唯一有问题的是sanf以及printf中的格式字符,如果是char应该用%c.而且如果在程序内部赋值的话,字符串要用""括起,而字符只能用''括起.
这种定义和C++是不一样的,C++完全允许char ch[]这种声明方式的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式