给大家标一个坑。
我在执行
strcat(a, a);
操作的时候,发现运行失败;调试时报错Program received signal SIGSEGV, Segmentation fault.
。
模糊的翻译一下就是内存无效——这里就是数组越界了。
原因很简单,(通过函数声明发现到)strcat()
函数执行用的是指针,而不是新建数组。
char * __cdecl strcat(char * __restrict__ _Dest,const char * __restrict__ _Source);
所以,就相当于,被操作数组每增长一个字符,操作数组也在同时增加;很明显,这就是死循环了。
就像这样:
for(inti=0; i<strlen(a); i++){
a[strlen(a)]=a[i];
}
因此,我们需要使用一个新建的临时数组完成此操作。
strcpy(b, a);
strcat(a, b);