标题:[求助]实现字符串复制
只看楼主
lvzehong
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-4-29
 问题点数:0 回复次数:8 
[求助]实现字符串复制
#include <stdio.h>
#include <string.h>

void copy_string(char *from,char *to)
{
    char *p1,*p2;
    p1=from;
    p2=to;
    while((*p2++=*p1++)!='\0');
    p2='\0';
}
main()
{
    char *a="i love china!";
    char *b="i am a student!";
    puts(a);
    puts(b);
    copy_string(a,b);
    puts(a);                    
    puts(b);
    printf("%d\t%d",strlen(b),sizeof(b));
}

编译,连接都正常,出现程序运行错误,不能得到想要的结果.
请指出错误.
搜索更多相关主题的帖子: char 字符 puts love string 
2008-03-29 17:27
leaf521
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-3-15
得分:0 
C语言里没有直接的字符串,
你为什么不用字符数组进行操作!!!
2008-03-29 17:38
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
得分:0 
sctcpy (字符数组1,字符穿/字符数组)

------...-.-..-...-----........-------.......----.....------....||- - !
2008-03-29 17:48
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
得分:0 
我的编译正常
在WIN-TC下,运行正常,结果是5行,头2行是原a、b值,再2行是原a值,最后一行是字符串的长度。

你所指的正确结果是什么?
2008-03-29 19:13
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
#include <stdio.h>
#include <string.h>

void copy_string(char *from,char *to)
{
    char *p1,*p2;
    p1=from;
    p2=to;
    while((*p2++=*p1++)!='\0');
    p2='\0';
}
main()
{
    char a[]="i love china!";
    char b[]="i am a student!";
    puts(a);
    puts(b);
    copy_string(a,b);
    puts(a);                    
    puts(b);
    printf("%d\t%d",strlen(b),sizeof(b));
}
指针换数组...一般情况下一个字串给指针会被当成常量字符串..是不允许修改的..用数组的话注意数组长度...

学习需要安静。。海盗要重新来过。。
2008-03-29 19:45
now
Rank: 1
来 自:广州
等 级:新手上路
帖 子:544
专家分:0
注 册:2007-11-9
得分:0 
char *a="i love china!"; char *b="i am a student!";
while((*p2++=*p1++)!='\0');
C标准中,编译器不应该允许这么做。这样意味着试图去改变一个字符串常量,在某些编译器中确实能通过,但这是毫无可移植性可言的。
char *a="i love china!"; //字符串常量,存储在静态数据区(只有一份),指针a仅获得其首地址,指向的是一个常量,常量是不可改的;
char a[]="i love china!";//与上述不同,a指向单独的内存空间,其内容是从静态数据区中所定义的字符串常量复制过来的,你可以任意修改,但修改的只是常量的拷贝。

GIS
Geographic Information System
你在哪里?——》你的坐标?
2008-03-29 20:17
lvzehong
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-4-29
得分:0 
回复 4# 的帖子
为什么在visual C++ 6.0 编译器下不得到运行的结果呢...运行时会出现运行错误.
2008-03-29 21:07
now
Rank: 1
来 自:广州
等 级:新手上路
帖 子:544
专家分:0
注 册:2007-11-9
得分:0 
请改为5楼的试下。
因为你的代码试图去改变一个常量,编译器就会出现内存访问错误。

GIS
Geographic Information System
你在哪里?——》你的坐标?
2008-03-29 21:12
lvzehong
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-4-29
得分:0 
回复 8# 的帖子
多谢,我的意图是主调函数和被调函数的实参和形参都用字符指针变量.
我应该在在主函数中定义两个字符指针变量,分别指向字符数组的首地址.
再调用这两个字符指针变量.

为什么中华之软件业崛起而学习!
2008-03-29 21:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-206035-1-1.html




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

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