问题:strcat()是常用的字符串拼接函数,最近在使用strcat的时候,发现如下问题
#include <iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
cout<<"input n:" ;
cin>>n;
char d1[]="rede";
//char p3[2000];
char *p3 =new char[2000];
//p3[2000]={};
//strcpy(p3, d1); //可以对目标数组进行初始化
int len = n/4;
cout<<n <<" "<<len <<endl;
for(int i=0;i<len;i++)
{
strcat(p3,(const char*)d1);
}
for(int i=0;i<n;i++)
{
printf("%c ",p3[i]);
}
cout<<endl;
cout << p3<<endl;
delete [] p3;
return 0;
}
输出如下:
可以看出来,在strcat过程中,出现了问题,p3数组的首位出现了问题,导致 输出异常
接下来,加上strcpy,输出如下,结果正常
具体原因:这片文章讲的很清楚了,总之,在使用strcat时,要先给目标数组的初始化。
所以我们看到使用strcat的代码前面,一般会strcpy或者sprintf进行数组的初始化。
参考: