| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2565 人关注过本帖
标题:用C自己写一个string copy函数 帮忙看看哪里写的不对
只看楼主 加入收藏
lindayanglong
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2008-3-9
收藏
 问题点数:0 回复次数:15 
用C自己写一个string copy函数 帮忙看看哪里写的不对
#include<iostream>
using namespace std;
void stringcopy(char *p)
{
    char *ps;
    while(*p!='\0')
    {
        *ps=*p;
        ps++;
        p++;
    }

    cout<<ps<<endl;
}
void main()
{
    char *p="abcdeffg";
    
    stringcopy(p);
}
搜索更多相关主题的帖子: string 函数 
2008-10-23 16:46
beyondlwm
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-7-19
收藏
得分:0 
*ps=*p;

这个没有意义。
2008-10-23 16:51
lmyouya
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-10-17
收藏
得分:0 
#include<iostream>
using namespace std;
void stringcopy(char *p)
{
    char *ps,a[20];
    ps=a;
    while(*p!='\0')
    {
        *ps=*p;
        ps++;
        p++;
    }
    *ps='\0';
    ps=a;
    cout<<ps<<endl;
}
void main()
{
    char *p="abcdeffg";
   
    stringcopy(p);
}

吖吖走了
2008-10-23 16:53
lmyouya
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-10-17
收藏
得分:0 
[bo][un]lindayanglong[/un] 在 2008-10-23 16:46 的发言:[/bo]
void stringcopy(char *p)
{
    char *ps;         
    while(*p!='\0')
    {
        *ps=*p;
        ps++;
        p++;
    }

    cout<<ps<<endl;
}


 char *ps;  //这里只申请了一个空间!

*ps=*p;
ps++;      //ps指向下一个字节,超过申请的一个字节的内存空间,发生栈溢出,很危险
            //这就是传说中的溢出漏洞的一个简单例子,如果好好的构造一个 *p=shellcode;
            //还发生很有趣的事情,有趣到可以写一本书

p++;

[[it] 本帖最后由 lmyouya 于 2008-10-23 17:07 编辑 [/it]]

吖吖走了
2008-10-23 17:03
huxiangking
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-10-23
收藏
得分:0 
顶 受益匪浅
2008-10-23 19:42
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
#include<iostream>
#include<cstring>
using namespace std;
char* stringcopy(char*);

int main()
{
  char* pi="abcdefg";
  char* ptr=stringcopy(pi);
  delete [] ptr;
  getchar();
  return 0;  
}

char* stringcopy(char* i)
{
  char* pstr=new char[strlen(i)+1];
  while(*i!='\0')
  {
    *pstr++=*i++;            
  }
  *pstr='\0';
  cout<<pstr<<endl;
  return pstr;      
}
不知道 为什么 不显示

[[it] 本帖最后由 newyj 于 2008-10-23 23:26 编辑 [/it]]
2008-10-23 20:31
lmyouya
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-10-17
收藏
得分:0 
修改后的代码:
程序代码:
#include<iostream>
#include<cstring>
using namespace std;
char* stringcopy(char*);

int main()
{
  char* pi="abcdefg";
  char* ptr=stringcopy(pi);
  delete [] ptr;
  getchar();
  return 0;  
}

char* stringcopy(char* i)
{
char *pstr=new char[20],*head; 
cout<<i<<endl;
    head=pstr;
  while(*i!='\0')
  {
    *pstr++=*i++;
  }
  *pstr='\0';
  return head;      
}



你想想你原来的程序的运行过程序:
i=&"abcdefg"
*i=a *pstr='a';
i++ pstr++
*i='b' *pstr='b'
i++ pstr++
...
...
i指向'\0', 所以这时 cout不出来!
pstr指向了一个不是刚才 new 出来的地址的第一个地址的,返回了这样一个地址(可以返回!),但可能运行实时出错(栈溢出)。
没在汇编级运行,不是很清楚,有说错了的地方还请见谅。吖吖很菜很菜!

[[it] 本帖最后由 lmyouya 于 2008-10-24 11:29 编辑 [/it]]

吖吖走了
2008-10-23 21:50
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
不知道 ls是否运行过 这段代码
new出来的 在 函数结束时 并没有 被撤消 所以 可以返回
不知道 你所说的 错误 是否 就是这个?
还有最后那个输出的i是写错了 并不是 有意 写成i的
2008-10-23 23:30
Go2009
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-10-19
收藏
得分:0 
回复 3# lmyouya 的帖子
*ps='\0';
ps=a;
请问上面两句是什么意思?在这个程序里是什么作用。我不是很明白。谢谢···
2008-10-24 00:39
还是个蛋
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-10-24
收藏
得分:0 
  额 看不懂。。。。不好意思    才开始学。。。
2008-10-24 11:00
快速回复:用C自己写一个string copy函数 帮忙看看哪里写的不对
数据加载中...
 
   



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

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