| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 870 人关注过本帖
标题:关于字符串指针问题
只看楼主 加入收藏
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
 问题点数:0 回复次数:9 
关于字符串指针问题

老师让用引用完成字符串交换
每次我运行都是错
要不第一个字符没拷过去
要不就是指针错误
我跟踪了 不是指针没申请私有空间的错
莫名其妙的错 眼睁的看传过去了 一会又不是了
#include <iostream.h>
void swap(char* &rap,char* &rbp);
void main()
{
char *ap="hello";
char *bp="how are you";

swap(ap,bp);

cout<<ap<<endl;
cout<<bp<<endl;

}
void swap(char* &rap,char* &rbp)
{
char* tmp;
int i;

for(i=0;*rap!=0;i++)
{
*(tmp++)=*(rap++);
}

*tmp=0;//加尾节点
rap-=i;//指针复位
tmp-=(i+1);

for(i=0;*rbp!=0;i++)
{
*(rap++)=*(rbp++);
}

*rap=0;
rap-=(i+1);
rbp-=i;


for(i=0;*tmp!=0;i++)
{
*(rbp++)=*(tmp++);
}

*rbp=0;
rbp-=(i+1);
}

搜索更多相关主题的帖子: 字符 指针 
2006-03-31 12:45
名人
Rank: 1
等 级:新手上路
威 望:1
帖 子:205
专家分:0
注 册:2006-3-3
收藏
得分:0 

根本就不用你那么麻烦

#include <iostream.h>
void swap(char* &rap,char* &rbp);
void main()
{
char *ap="hello";
char *bp="how are you";

cout<<"ap = "<<ap<<endl;
cout<<"bp = "<<bp<<endl;

swap(ap,bp);

cout<<"ap = "<<ap<<endl;
cout<<"bp = "<<bp<<endl;

}
void swap(char* &rap,char* &rbp)
{
char* tmp;

tmp = rap;
rap = rbp;
rbp = tmp;
}


未必钱多乐便多,财多累己招烦恼。 清贫乐道真自在,无牵无挂乐逍遥。
2006-03-31 13:01
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
但是我想知道我那哪里错了呀


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-03-31 13:11
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
还有一点不明白
为什么
cout<<字符指针
为什么能把所有内容输出
按理讲应该是第一个呀
cout后面传递的不是一个地址吗
可cout<<*P;
就是输出第一个
而*P不是第一个的内容吗


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-03-31 13:16
名人
Rank: 1
等 级:新手上路
威 望:1
帖 子:205
专家分:0
注 册:2006-3-3
收藏
得分:0 
*(tmp++)//这里
tmp是个没有分配空间的指针

未必钱多乐便多,财多累己招烦恼。 清贫乐道真自在,无牵无挂乐逍遥。
2006-03-31 13:16
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
我申请空间了
也是错呀

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-03-31 13:17
名人
Rank: 1
等 级:新手上路
威 望:1
帖 子:205
专家分:0
注 册:2006-3-3
收藏
得分:0 
哪里申请了?你那只是指向一个字符串。

未必钱多乐便多,财多累己招烦恼。 清贫乐道真自在,无牵无挂乐逍遥。
2006-03-31 13:33
名人
Rank: 1
等 级:新手上路
威 望:1
帖 子:205
专家分:0
注 册:2006-3-3
收藏
得分:0 

如果你非要一个一个字符那样做就这样改吧
#include <iostream.h>
void swap(char* &rap,char* &rbp);
void main()
{
char *ap="hello";
char *bp="how are you";

swap(ap,bp);

cout<<ap<<endl;
cout<<bp<<endl;


}
void swap(char* &rap,char* &rbp)
{
char* tmp;
int i;

tmp = new char;
for(i=0;*rap!=0;i++)
{
*tmp = *rap;
tmp++;rap++;
}
*tmp=0;//加尾?点
rap -= i;//指??位
tmp -= i;
rap = new char;
for(i=0;*rbp!=0;i++)
{
*rap = *rbp;
rap++;rbp++;
}

*rap = 0;
rap -= i;
rbp -= i;
rbp = new char;
for(i=0;*tmp!=0;i++)
{
*rbp =*tmp;
rbp++;tmp++;
}

*rbp = 0;
rbp -= i;
}


未必钱多乐便多,财多累己招烦恼。 清贫乐道真自在,无牵无挂乐逍遥。
2006-03-31 13:39
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 

"hello";
"how are you";

是常量字符串,只可以交换指向它们的指针.

应该是名人 2楼的那个.


2006-03-31 14:13
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
首先谢谢名人
还有一点不明白
为什么
cout<<字符指针
为什么能把所有内容输出
按理讲应该是第一个呀
cout后面传递的不是一个地址吗
可cout<<*P;
就是输出第一个
而*P不是第一个的内容吗
还有
*tmp=0;//加尾?点
rap -= i;//指??位
tmp -= i;
这里的tmp已经多加了一位0 应该-(i+1)吧


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-03-31 18:04
快速回复:关于字符串指针问题
数据加载中...
 
   



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

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