返回信息流在应用程序里有这样一段代码:
char *record_count ="a";
char *playback_count ="a";
*playback_count=*record_count;
运行后会发生segmentdefault,想来想去也想不明白
只好换成
char record_count[] ="a";
char playback_count[] ="a";
playback_count[0]=record_count[0];
这样就好了
但是对于前面那个为什么会出错还是很费解,特求教
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #3371同步于 2008/12/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
问个c语言的比较弱的问题
lester98
2008/12/26镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 lester98 (奶瓶|单车旋风族之太阳风) 的大作中提到: 】
: 在应用程序里有这样一段代码:
: char *record_count ="a";
: char *playback_count ="a";
: *playback_count=*record_count;
: 运行后会发生segmentdefault,想来想去也想不明白
~~~~~~~~~segment fault,嗯嗯
: 只好换成
: char record_count[] ="a";
: char playback_count[] ="a";
: playback_count[0]=record_count[0];
: 这样就好了
: 但是对于前面那个为什么会出错还是很费解,特求教
*playback_count=*record_count;
你这个不就是往常量区里面修改内容么?
你的playback_count可是指向的是string literal "a" 啊。
对
就像是下面的代码也会sgfault
int *p1 = 111;
int *p2 = 222;
*p1=*p2;
用GDB看看地址夜能明白
【 在 ericyosho 的大作中提到: 】
: *playback_count=*record_count;
: 你这个不就是往常量区里面修改内容么?
: 你的playback_count可是指向的是string literal "a" 啊。
【 在 ericyosho 的大作中提到: 】
: *playback_count=*record_count;
: 你这个不就是往常量区里面修改内容么?
: 你的playback_count可是指向的是string literal "a" 啊。
多谢,我真是弱智了
赞楼上几位,应该是常量区的问题
再说句题外话,想起来前两天帮人看程序
char str[12];
scanf(str);
if(str == "quit")
{
/* .....*/
}
发现总是执行不到这个分支里面,实际上比较的是指针值的说
上面的指针是指向常量的指针,应该是代码段里的立即数,常量的值不能修改
下面的指针是开了一个指针数据,在数据段里面分配了内存空间,是变量,变量的值可以修改