返回   cpper编程论坛 > 算法
注册账号 论坛帮助 会员列表 日历事件 搜索 今日新帖 标记版面已读

回复
 
LinkBack 主题工具 显示模式
  #1 (permalink)  
旧 2008-08-16
学习者
 
注册日期: 2008-08-11
帖子: 11
afey 正向着好的方向发展
默认 为什么会发生地址冲突?

实现 void delete_char(char *str, char ch),把str中所有的ch删掉。
我这里实现了一个函数如下:
void delete_char(char *from, char ch){
char *p;
char *q = from;
char temp;
for(p = from; (temp=*from) != '\0'; from++){
if (temp != ch){
*p=temp;
p++;
}
}
*p = '\0';
from = q;
}
主函数测试:
void main(){
char aa[] = "abcabcdefgabc";
printf("初始字符串为:%s\n", aa);
delete_char(aa, 'c');
printf("删除后字符串为:%s\n", aa);
system("pause");
}
测试结果正常,但是如果把定义
char aa[] = "abcabcdefgabc";改为
char *aa = "abcabcdefgabc";
在运行过程中就会在*p=temp;处发生地址访问冲突,请问这是为什么呀?

此帖于 2008-08-16 10:35 PM 被 afey 编辑.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #2 (permalink)  
旧 2008-08-18
wqqafnd 的头像
高级会员
 
注册日期: 2004-10-08
帖子: 193
文章: 1
wqqafnd 正向着好的方向发展
发送 MSN 消息给 wqqafnd
默认 回复: 为什么会发生地址冲突?

char aa[] = "abcabcdefgabc";
定义的是char [14]的局部变量,可以修改变量的值。

char *aa = "abcabcdefgabc";
定义的是char的指针,指向静态存储区的一个字符串常量“abc...”,这个常量的值不能改变。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #3 (permalink)  
旧 2008-08-18
学习者
 
注册日期: 2008-08-11
帖子: 11
afey 正向着好的方向发展
默认 回复: 为什么会发生地址冲突?

引用:
作者: wqqafnd 查看帖子
char aa[] = "abcabcdefgabc";
定义的是char [14]的局部变量,可以修改变量的值。

char *aa = "abcabcdefgabc";
定义的是char的指针,指向静态存储区的一个字符串常量“abc...”,这个常量的值不能改变。
呵呵,谢谢拉。我明白了,是不是这么理解:
char aa[] = "abcdef";
这里定义了一个变量,变量的类型是数组,数组中每个元素的值是可以改变的。
char *aa = "abcdef";
这里定义了一个变量,变量的类型是指针,这个指针指向了一个常字符串,虽然指针的值是可以改变的,但是指针指向的内容因为是常量所以是不能改变的。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #4 (permalink)  
旧 2008-08-19
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,135
文章: 20
polyrandom 正向着好的方向发展
默认 回复: 为什么会发生地址冲突?

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
回复

书签

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9。现在的时间是 08:29 AM


Powered by vBulletin® 版本 3.7.0
版权所有 ©2000 - 2008,Jelsoft Enterprises Ltd.
(C) Copy Right All Right Reserved 2001 - 2007

Search Engine Friendly URLs by vBSEO 3.1.0