输入的字符串的长度是有限制的还是可以任意长?

boy8765 2004-01-17 09:31:46
在谭浩强的《C语言程序设计》第239页中,有这样的一段话:
……
对于char* a;

scanf("%s",a);

目的是输入一个字符串,但由于这个字符指针a的指向不明,所以这样的做法是不对的。(这句话我懂。)
……
正确的做法是:
char* a,str[10];
a=str;
scanf("%s",a);
先使a有确定值,也就是使a指向一个数组的开头。
……


我想问的问题是:
第一个问题:对于char* a,str[10];
a=str;
scanf("%s",a);
输入的字符串的长度是否不能超过10个字符?或者说,数组str[10]已经规定了输入的字符不能超过数组的存储范围还是可以超过数组的存储范围,比如输入25个字符?
第二个问题:对于char* a,str[10];
a=str;
scanf("%s",a);这个程序段,它是否等同于下述程序段
char* a;
a=NULL;
scanf("%s",a);

如果上述的两个程序段是等同的,那么,输入的字符串的长度应该是不限制的。是这样吗?请各位网友指正。


...全文
494 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fierygnu 2004-01-18
  • 打赏
  • 举报
回复
输入的长度限制用%10s来限制。
boy8765 2004-01-18
  • 打赏
  • 举报
回复
to clumsybear(bear):
所谓指向不明,就是指指针的值不确定。
关于你代码中所写的问题,我想到的就是,如果a恰好指向程序中一块重要用的内存区域,当你写入时,就会覆盖掉原来的东东,而这样的后果是危险的!
clumsybear 2004-01-17
  • 打赏
  • 举报
回复
我也有一个问题,引用贴主的内容:

在谭浩强的《C语言程序设计》第239页中,有这样的一段话:
……
对于char* a;
scanf("%s",a);

目的是输入一个字符串,但由于这个字符指针a的指向不明,所以这样的做法是不对的。



我想知道,潭浩强所说的字符指针a的指向不明,是什么意思?

刚才写了代码,可以通过C的编译(当然通过编译并不能说明什么,所以我想明确一下,究竟错哪了):
void main( )
{
char *a;
scanf("%s",a);
printf("%s\n",a);
}
clumsybear 2004-01-17
  • 打赏
  • 举报
回复
1。
输入的字符串的长度,不限制;
但是内存越界,将可能引起其它错误
字符串的长度可以为10

数组在内存中是分配连续空间的,你可以这样尝试:
(1)在给字符数组的存贮内容进行赋值前,先用一个字符指针,指向字符数组的首元素,然后越界打印内存中的字符值;
(2)给字符数组越界赋值;
(3)再用字符指针重新指向该字符数组,然后越界打印,你就会发现问题了

2。
char* a;
a=NULL;
scanf("%s",a);
a指向NULL,肯定出错
junnyfeng 2004-01-17
  • 打赏
  • 举报
回复
第二个问题:对于char* a,str[10];
a=str;
scanf("%s",a);这个程序段,它是否等同于下述程序段
char* a;
a=NULL;
scanf("%s",a);

第二个由于指针没指向一个可写的空间,所以会出错的。以上两个也不等同
nobush 2004-01-17
  • 打赏
  • 举报
回复
输入的字符串的长度应该是不限制的;
但,由于内存越界, 可能会引起意想不到的程序其它地方的错误
junnyfeng 2004-01-17
  • 打赏
  • 举报
回复
第一个问题:对于char* a,str[10];
a=str;
scanf("%s",a);
输入的字符串的长度是否不能超过10个字符?

可以超过,但可能会出错,所以不应该超出10
jettylee 2004-01-17
  • 打赏
  • 举报
回复
第一个问题 你的想法是对的
不过是 不能超过 9 个字符
因为字符串最后一个字符是"\0"

第二个问题 你的想法不对
scanf("%s",a)
这句语句的意思是 读入一段字符串放入a指针所指的空间
而你的a没有确定的空间指向
所以肯定出错

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧