[求助]实现字符串复制
#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));
}
编译,连接都正常,出现程序运行错误,不能得到想要的结果.
请指出错误.
----------------解决方案--------------------------------------------------------
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# 的帖子
多谢,我的意图是主调函数和被调函数的实参和形参都用字符指针变量.我应该在在主函数中定义两个字符指针变量,分别指向字符数组的首地址.
再调用这两个字符指针变量.
----------------解决方案--------------------------------------------------------