编写strcat函数出现了问题
这是最近看到的一道笔试题:
编写完整原型为char *strcat(char *strDest,const char *strSrc);函数。自己试着编写了一下,但是出现了解决不了的问题。
#include <stdio.h>
#include <malloc.h>
#include <string.h>
char *strcat1(char *strDest,const char *strSrc)
{
char *pchar = strDest;
while(*pchar != '\0')
pchar++;
while(*strSrc != '\0')
{
*pchar++ = *strSrc++;
}
*pchar = '\0';
return strDest;
}
char *strcat2(char *strDest,const char *strSrc)
{
char *pchar;
//char *pchar = (char*)malloc(30);
while(*strDest != '\0')
{
*pchar++ = *strDest++;
}
while(*strSrc != '\0')
{
*pchar++ = *strSrc++;
}
*pchar = '\0';
return strDest;
}
int main()
{
char a[30] = "hello";
char b[10] = "world!";
puts(strcat1(a,b));
puts(strcat2(a,b));
getchar();
return 0;
}
第一个函数strcat1()是可以成功编译的。出问题的是strcat2()函数,如果是对字符串指针pchar没有分配内存的话,在strcat2()函数中加上char *pchar = (char*)malloc(30); 也不能实现想要的结果。
希望各位大侠解救小弟。。
[解决办法]
你第二个函数究竟是干什么呢?想把连接后的结果放进另外一个数组?那你
一、不应该在函数内开辟内存啊,这种写法是不安全的。最好是当成参数传进来
二、那你返回strDest干什么呢
还是你第二个函数是别的目的???
[解决办法]
char *strcat2(char *strDest,const char *strSrc)
{
while(*strDest != '\0');
while(*strSrc != '\0')
{
*strDest++ = *strSrc++;
}
return strDest;
}
直接用strDest,不用pchar如何?
[解决办法]
pchar空间是在函数内分配的,返回后被销毁了,哪里还有helloworld。
[解决办法]
第二个函数有问题