| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5752 人关注过本帖
标题:通过指针获取输入的字符串
只看楼主 加入收藏
ODmini
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-8-27
结帖率:66.67%
收藏
已结贴  问题点数:4 回复次数:17 
通过指针获取输入的字符串
在Linux系统下,运行下面的代码出现(段错误,核心已转储)

求问出错在哪里?

图片附件: 游客没有浏览图片的权限,请 登录注册




[此贴子已经被作者于2016-8-5 23:16编辑过]

搜索更多相关主题的帖子: 字符串 Linux 
2016-08-05 23:15
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
收藏
得分:4 
图片附件: 游客没有浏览图片的权限,请 登录注册

低级错误~~
2016-08-05 23:41
ODmini
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-8-27
收藏
得分:0 
回复 2楼 FQYB
我用scanf()获取输入了。。
2016-08-05 23:45
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
收藏
得分:0 
看来你是没理解指针,指针不能当普通变量使用~~指针变量存储的是其他变量的地址~~可以通过指针变量指向引用到其他变量~~故称为指针~~只定义一个指针变量而没有将其他变量的地址赋值给它~~它就是一个空指针~~~而空指针的值是随机的~~他取决于指针变量所在的内存单元在上一次被赋值所保留的值~~那么这个值就非常可能指向其他程序的内存空间~~而在linux这种运行在保护模式的多任务操作系统~~是需要管理各个程序之间的行为~~如果你的程序有“触犯”到其他的程序的“地盘”(内存空间),系统就会把你的程序咔掉~~然后输出这么一个提示(段错误,核心已转储)

不知道你能不能明白~~简单来说  指针变量就是一个箭头  当它指着其他变量的时候系统就知道该去操作哪个变量~~ 但是你只有一个啥都不指的箭头 程序就会出错~~

2016-08-06 00:01
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
收藏
得分:0 
这样写才对
图片附件: 游客没有浏览图片的权限,请 登录注册

2016-08-06 00:07
ODmini
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-8-27
收藏
得分:0 
回复 5楼 FQYB
首先谢谢你的耐心回答,我知道你的第二种写法(指针指向一个数组),但是还不是我想要的结果;   

我之前确实这样写过:只定义char *p;   然后scanf("%s", p); 最后printf("%s\n", p);
而且也没出现什么问题,我想要的结果也是只用指针,而不用数组;

图片附件: 游客没有浏览图片的权限,请 登录注册


这个是我在某个博客上看到的,和我想要的结果一样,说明我说的不是无厘头。但是我将他的这个代码在Linux系统下运行之后也出现错误。不知道是什么原因!
2016-08-06 00:15
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
收藏
得分:0 
那不好意思是我误解你了,你说那种方法我想了想

首先scanf是要知道一个内存空间的地址才能把从输入缓冲区的内容复制到里面去的,scanf只会完成讲输入的植复制到某个内存空间里面,scanf不会聪明到看你给了个空指针就帮你创建一个内存空间然后地址付给空指针变量的

所以你之前可以可能是因为编译器的问题或空指针的指向没有超界,但是那是有危险的

如果你想实现不用数组那就malloc定义一个内存空间吧
2016-08-06 00:26
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
收藏
得分:0 
如果你真的想知道这个问题,用debug一句一句调试看汇编代码吧
2016-08-06 00:31
ODmini
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-8-27
收藏
得分:0 
回复 8楼 FQYB
恩恩,我也想了想,可能之前是因为【运气】的问题,指针没有指向“特殊的地方”;

不用数组,也可以这样写:

图片附件: 游客没有浏览图片的权限,请 登录注册


这样虽然运行的没问题,但是我认为有问题,因为a是字符变量,能存字符串吗?或者说自动为a开辟了空间(当给a一个字符串时)?
2016-08-06 00:37
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
收藏
得分:0 
http://m.blog.

这个帖子说明的观点和我一样,scanf是需要你准备足够的内存空间才能输入字符串的
2016-08-06 00:38
快速回复:通过指针获取输入的字符串
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042561 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved