在程序中多次用的strcat函数,但是有时候编译通过,但是执行时却出现了错误。为了进一步了解strcat函数的使用,我首先写了这样的一个测试程序:
main()
{
char *Temp=(char *)malloc(sizeof(char)*200);
Temp="strcat";
char *Append=" a test program!";
strcat(Temp,Append);
printf("%s\r\n",Temp);
return 0;
}
这个程序,从感觉上没有错误,而且编译也不会出现错误,但是就是运行时却出现了错误,错误的地方就是在strcat这个函数处。刚开始百思不得其解,后来恍然大悟,所以就把我如何理解和处理的过程写在这里,以备以后查阅。
1、分析原因 
程序错误的原因:内存不允许写入。我想到strcat要有足够的空间来保存要连接的两个字符串,而我开辟的200个字节的空间怎么会容不下这几个两个字符串。原因肯定不是空间不够,我把Temp改成定义为变量,ok可以通过。难道是strcat的第一个参数不能为指针变量,我仔细看了函数的说明没有这样的要求,所以也不是这个问题。
字符串常量和变量后来,我单步运行程序,发现了问题的症结所在。在定义了一个基类型为char类型的Temp指针变量并给他分配了200个字节的空间,但是执行到下一行就出现问题了Temp的值变了。这个原因我当时没有想到,后来仔细想想自己曾经总结过,是因为后面的字符串被当做了字符串常量,存储到了常量区,而Temp存储这个常量区首字符地址,所以根本就不是动态分配的空间。而后面strcat试图将一个字符串写入到一个常量区,所以出现了不允许写入的问题。
原因到了,下面就是如何解决这个问题了。
2、问题解决
为了解决这个问题,我想出了两个解决方案:
2.1、将strcat的第一个参数定义为数组,这样就避免了其在常量区的问题,问题得到了解决,哈哈,有点得意忘形了。有人问我习惯使用指针存储字符串怎么办?
2.2、没有关系,也是有解决的办法的,使用指针,并给其分配足够的空间,下面就是赋值的问题,如果不采用像上面的赋值方式那样就可以了,但是如何把一个字符串写到一个已分配的空间。我想到了strcpy这个函数,他可以把你的字符串写入到你给他分配的空间里去。
问题总算解决了,困扰了我几天的问题终于算搞明白了,是否一点问题都没有了,还有待于以后发现。
3、小结
下面应该写一下strcat的形式了吧,下面给出使用这个strcat函数需要的头文件、函数的参数和函数的返回值等等。
原型:extern char *strcat(char *dest,char *src);
  用法:#include <string.h>
  功能:把src所指字符串添加到dest结尾处(覆盖d
est结尾处的'\0')并添加'\0'。
  说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
  返回指向dest的指针。
最重要的:就是我上面分析的问题了,哈哈,有点小成就感!现在每遇到一个问题,就会这样分析,希望在这个过程中可以有更大的收获!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。