用函数调用实现字符串的复制
发布网友
发布时间:2022-05-23 16:40
我来回答
共5个回答
热心网友
时间:2023-10-29 18:02
个人见解:
for (; *from!='\0';from++,to++) //这foe循环出错了,
*to=*from;
都知道指针指向对象保存的内存地址的
例如: char *p = "abc";
p是指向对象的地址,数组则是指向首地址,为什么?因为数组在内存中是连续存储的,每个元素都有自己的内存地址。知道这些就行,然后看 char *p = "abc" 。一开始我是这样想的,指针p是指向字符串中的第一个元素a。其实这样是错的!正确的是p是指向字符串abc在内存中的地址,也就是说abc在同一个内存地址上。这样想就解决了lz这个程序中的问题。在lz的循环中,让两个指针from&to自增,虽然循环第一次没有报错,但是得到的结果也不会是lz想要的正确结果,而循环第二次执行时,由于指针自增,指向了非form&to的地址了,也就是指针P想要修改其他内存的地址。
#include <iostream>
using namespace std;
void copy_string ( char *&from, char *&to)
{
to = from;
/*
for (; *from!='\0';from++,to++)
*to=*from;
*to='\0';*/
}
main()
{
char *a="I am teacher";
char *b="you are a student";
printf ("\n string a=%s \t string b=%s \n",a,b);
copy_string(a,b);
//下面的printf你再检查下,
//printf ("\n string a=%s \t string b=%S \n",a,b);
//用cout输出没问题
cout<<"string a = "<<a<<"\t"
<<"string b = "<<b<<endl;
}
热心网友
时间:2023-10-29 18:02
因为a 和 b都是const char *型(字符串常量),如果要将a复制到b内,需要将b定义为char b[100]这样。
比如:char a[100]="I am teacher";
char b[100]="you are a student";
copy_string(a,b);追问按你说的改过后编译运行的结果仍然不对。。
追答第一:你必须把第二个printf里的大写S改成小写s。第二:如果你是在windows的IDE下编程,请把main写成int main(void),在程序结尾处(大括号内)加上getchar(); return 0;因为windows下IDE环境下如果没有死循环或者输入函数,执行完毕后是看不到那个黑色窗口的。
那是因为你没有添加头文件。
你要在代码的最前面加上
#include
热心网友
时间:2023-10-29 18:03
1.把char *b="you are a student"改为char b[50]="you are a student";
2.把最后一句printf ("\n string a=%s \t string b=%S \n",a,b)中的%S改为%s(s小写)。
这样一切OK!
热心网友
时间:2023-10-29 18:03
按照你原来的程序,只要将后面一句大写的S改为小写就行。不过那个for循环,你要确认没有加大括号才行。
热心网友
时间:2023-10-29 18:04
char * copy_string(char * to,const char * from);
{
if ((to==NULL)||(from==NULL)) //确保输入无措,否则抛异常
{ printf("Error Input!"); exit(1);}
char * strDestCopy=to; //保存原始的指针地址
while ((*to++=*from++)!='\0');
return strDestCopy;
}