为什么str_cat(str1,str2,str3)会系统有错?

为什么str_cat(str1,str2,str3)会系统有错?

#include<iostream>

#include<assert.h>

using namespace std;


//字符串长度

int str_len(const char *str)

{

assert(str!=NULL);

int len=0;

for(;*str!='\0';str++)

len++;

return len;

}


//比较两个字符串

bool str_cmp(const char *str1,const char *str2)

{

assert(str1!=NULL&&str2!=NULL);

bool flag=1;//=1表示相同,=0表示不相同

for(;*str1!='\0'||*str2!='\0';str1++,str2++)

{

if(*str1!=*str2)

flag=0;

}

return flag;

}


//拷贝字符串

char *str_copy(const char *str1,char *str3)

{

assert(str1!=NULL&&str3!=NULL);

char *p=str3;

for(;*str1!='\0';str1++,str3++)

*str3=*str1;

*str3='\0';

return p;

}


//连接字符串

char *str_cat(const char *str1,const char *str2,char *str3)

{

assert(str1!=NULL&&str3!=NULL&&str3!=NULL);

char *p=str3;

for(;*str2!='\0';str2++,str3++)

*str3=*str2;

    for(;*str1!='\0';str1++,str3++)

*str3=*str1;

*str3='\0';

return p;

}

int main()

{

char *str1="hello world,my god!";

char *str2="hello world!";

char str3[20];

char *p=str3;

bool flag=str_cmp(str1,str2);


cout<<"字符串长度为:"<<str_len(str1)<<endl;

if(flag)

cout<<"两个字符串相同!"<<endl;

else 

cout<<"两个字符串不相同!"<<endl;


cout<<"拷贝后的字符串为:"<<str_copy(str1,str3)<<endl;

cout<<"连接后的字符串为:"<<str_cat(str1,str2,str3)<<endl;

为什么str_cat(str1,str2,str3)会系统有错,但新定义一个空的str4[],然后str_cat(str1,str2,str4)就没错了。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕查理 2018-11-19 17:43:22

您好,主方法缺少结束的}。使用VC测试str_cat(str1,str2,str3)是没有问题的。请反馈一下编辑器以及报错信息,以便调试。祝学习愉快!

  • 提问者 慕盖茨6136298 #1
    之前是系统报错,就像死循环那种报错。后来,我把str3[20]改成str3[30]就不报了,那可能我连接后的字符串超过了20吧,不知道会因为这样吗?
    2018-11-20 08:55:36
  • 好帮手慕查理 回复 提问者 慕盖茨6136298 #2
    您好,您可以将系统报错的信息反馈一下,以及使用的环境,以便在相应的环境中测试您的代码是否会出现相同的问题。祝学习愉快!
    2018-11-20 10:41:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
C++零基础入门 热门编程语言 二级考试必备
  • 参与学习       529    人
  • 提交作业       110    份
  • 解答问题       594    个

无论您是零基础、还是想晋升,亦或是想转型,C++无疑都是最佳选择。本路径共分为基础语法、指针与引用、面向对象三大模块,为你开启入门C++编程的大门!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师