当前位置: 代码迷 >> C语言 >> [求助]实现字符串复制
  详细解决方案

[求助]实现字符串复制

热度:166   发布时间:2008-03-29 17:27:55.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));
}

编译,连接都正常,出现程序运行错误,不能得到想要的结果.
请指出错误.
搜索更多相关的解决方案: char  字符  puts  love  string  

----------------解决方案--------------------------------------------------------
C语言里没有直接的字符串,
你为什么不用字符数组进行操作!!!
----------------解决方案--------------------------------------------------------
sctcpy (字符数组1,字符穿/字符数组)
----------------解决方案--------------------------------------------------------
我的编译正常
在WIN-TC下,运行正常,结果是5行,头2行是原a、b值,再2行是原a值,最后一行是字符串的长度。

你所指的正确结果是什么?
----------------解决方案--------------------------------------------------------
#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 *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指向单独的内存空间,其内容是从静态数据区中所定义的字符串常量复制过来的,你可以任意修改,但修改的只是常量的拷贝。
----------------解决方案--------------------------------------------------------
回复 4# 的帖子
为什么在visual C++ 6.0 编译器下不得到运行的结果呢...运行时会出现运行错误.
----------------解决方案--------------------------------------------------------
请改为5楼的试下。
因为你的代码试图去改变一个常量,编译器就会出现内存访问错误。
----------------解决方案--------------------------------------------------------
回复 8# 的帖子
多谢,我的意图是主调函数和被调函数的实参和形参都用字符指针变量.
我应该在在主函数中定义两个字符指针变量,分别指向字符数组的首地址.
再调用这两个字符指针变量.
----------------解决方案--------------------------------------------------------
  相关解决方案