A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 触底反弹 中级黑马   /  2015-11-11 14:56  /  3012 人查看  /  31 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 触底反弹 于 2015-11-13 22:03 编辑

想问一下这个问题是怎么回事

屏幕快照 2015-11-11 下午2.53.52.png (113.69 KB, 下载次数: 126)

屏幕快照 2015-11-11 下午2.53.52.png

31 个回复

倒序浏览
能有朋友直接说一下修改意见吗?
回复 使用道具 举报
你必须给字符串一个长度,要么定义的时候就直接赋值,如果想从键盘接收输入,只能用给定长度的字符数组
回复 使用道具 举报
wwf707542865 发表于 2015-11-11 18:45
你必须给字符串一个长度,要么定义的时候就直接赋值,如果想从键盘接收输入,只能用给定长度的字符数组 ...

恩,这个我试过,这个是做基础测试题的时候遇到的,百度了一下好多人都是这样的,但是都没问题,为什么我写就有问题
回复 使用道具 举报
直接苹果本了啊
回复 使用道具 举报
str只是指向一个char型变量的指针,怎么看都不可以,,你注释掉的那句不是对的么,,
回复 使用道具 举报

学习嘛  装备还是要买的
回复 使用道具 举报
Morning_jcg 发表于 2015-11-11 22:13
str只是指向一个char型变量的指针,怎么看都不可以,,你注释掉的那句不是对的么,, ...

恩  注释掉的是我没办法解决问题才这样的   我只是看到很多人都是写的char *str这样的    可是自己写怎么就不行  又没报错信息  实在找不到原因,所以提出来问问
回复 使用道具 举报
Morning_jcg 发表于 2015-11-11 22:13
str只是指向一个char型变量的指针,怎么看都不可以,,你注释掉的那句不是对的么,, ...

还有看你技术分这么多,怎么来的,能说说吗
回复 使用道具 举报
触底反弹 发表于 2015-11-11 22:20
还有看你技术分这么多,怎么来的,能说说吗

技术分是黑马币换的,,首先,就算你说别人说能我还是觉得不能,至少这么用是不能的。真说要这么用,也要char a[100]; char *str=a;  这样才行。
回复 使用道具 举报
给字符串一个长度,要么定义的时候就直接赋值
回复 使用道具 举报
这个问题书本上叫野指针错误,就是一个指针,你没有给他分配内存空间,或者分配了内存空间,释放了没有置空,又再次去访问指针所造成的错误就是野指针错误,野指针错误属于段错误的一种,一种内存的非法访问。如果还有其他问题,想要进行交流的话,可以直接去我那里进行留言。
回复 使用道具 举报
问题很大这个
回复 使用道具 举报
如果定义一个char *str字符串指针的话, 那么这个char *str;在内存中表示的就是一个常量了,而你第75行,用str表示地址是没有错,但是用的是%s来表示输入值,这是不对的,因为%s表示的是输入一个字符串,所以你这样改为%c,就可以了,然后你让输入的时候,输入单个字符,就可以编译通过了  
回复 使用道具 举报
当然,你也可以,更改一下上面的指针, 改为 char (*str)[];   因为,字符串指针,首先必须是个字符串,而字符串是数组的一种,字符串可以看成是一个二维数组,这样你下面的scanf的用法就对了,  希望对你有用
回复 使用道具 举报
scanf里面不是应该取地址么
回复 使用道具 举报
醉叶惜秋 发表于 2015-11-12 01:01
scanf里面不是应该取地址么

字符串指针不已经是地址了吗
回复 使用道具 举报
正在输入中... 发表于 2015-11-11 23:09
这个问题书本上叫野指针错误,就是一个指针,你没有给他分配内存空间,或者分配了内存空间,释放了没有置空 ...

其实我也大概知道错误,只不过看见别人给的代码都可以,就不确定原因了,因为不止一个人,还是谢谢啦
回复 使用道具 举报
熊德玺 发表于 2015-11-12 00:46
当然,你也可以,更改一下上面的指针, 改为 char (*str)[];   因为,字符串指针,首先必须是个字符串,而字符串 ...

nice啊,用数组指针确实就能想得通了,我先试一下,谢谢了
回复 使用道具 举报
大概说一下自己理解吧!scanf 本就是对某一内存空间赋值,而char *str只是一个指针,声明后并未赋值,也就是野指针,所以scanf赋值时会报错
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马