这段代码编译没错,但是为什么运行起来却无法实现呢?
#include<iostream>
#include<string>
#include<assert.h>
using namespace std;
int str_len(const char *str);
char *str_con(char *des,const char *in);
char *str_copy(char *des,const char *in);
int main()
{
//定义两个字符串
//比较两个字符串的长度,根据结果连接字符串,并输出连接后的字符串
char *p="I am a chinese";
char *q="I love China";
char gg[30];
if(str_len(p)>str_len(q))
{ cout<<str_con(gg,p)<<endl;//其实我觉得这里用str_con和str_copy是一样的,用str_copy也会出现一样的错误
cout<<str_con(gg,q)<<endl;
}
else
{ cout<<str_con(gg,q)<<endl;
cout<<str_con(gg,p)<<endl;
}
return 0;
}
int str_len(const char *str)
{
assert(str!=NULL);
int len=0;
while(*str++!='\0')len++;
return len;
}
char *str_con(char *des,const char *in)
{
assert((des!=NULL)&&(in!=NULL));
char *address=des;
while(*des!='\0')des++;
while((*des++=*in++)!='\0');
return address;
}
char *str_copy(char *des,const char *in)
{
assert((des=!NULL)&&(in!=NULL));
char *address=des;
while((*des++=*in++)!='\0');
return address;
}
正在回答
您好,首先拷贝字符串逻辑:
目标数组=原字符串首地址,循环指针增加,将内容拷贝到目标数组中。当原字符串为'\0'时结束循环。
拼接字符串逻辑:
循环遍历目标数组的指针,将指针移动到目标数组的最后一位,再将内容和拷贝相同的方式拼接到原数组之后。
虽然代码上只相差了一行,但对于拼接函数判断指针移动到目标数组的最后一位while(*des!='\0')des++;这段代码不可缺少。
拼接字符串不能代替拷贝字符串则是因为这句判断,在拼接字符串时,代码中将目标地址定义为char gg[30];,但是拼接字符串中while(*des!='\0')des++;这段代码判断的是以'\0'结尾,程序对于空数组没有找到,所以你将str_copy换成str_con时会出现乱码并且程序终止,可在定义char gg[30];时改为char gg[30] = {'\0'};。则可以使用str_con方法了。
如果解决了您的问题,请采纳,祝学习愉快!
- 参与学习 529 人
- 提交作业 110 份
- 解答问题 594 个
无论您是零基础、还是想晋升,亦或是想转型,C++无疑都是最佳选择。本路径共分为基础语法、指针与引用、面向对象三大模块,为你开启入门C++编程的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星