腾讯面试,实现函数
参加腾讯面试,请实现这个函数
char * strcat(const char *strA, const char *strB) 腾讯 面试 strcat
[解决办法]
// 调用者负责释放返回的指针指向的空间
char * Mystrcat(const char *strA, const char *strB)
{
if (strA == NULL
[解决办法]
strB == NULL)
{
return NULL;
}
else
{
int nLenA =strlen(strA);
int nLenB =strlen(strB);
char *str = new char[nLenA+nLenB+1];
memcpy(str ,strA ,nLenA);
memcpy(str + nLenA ,strB,nLenB);
*(str + nLenA + nLenB) = '\0';
return str;
}
}
[解决办法]
出题的人太坏了,两个参数都是const,明显要函数内用static数据返回指针,但是数据长度又不给。。。。
不过还好字符串长度似乎不能超过2^32-1,也就是 4294967295
char * strcat(char *strA, const char *strB)
{
static unsigned int max_len =4294967295;
static char szRet[4294967295];
if (max_len -strlen(strA) <= strlen(strB))
return NULL;
sprintf(szRet,"%s%s",strA,strb);
return szRet;
}
[解决办法]
这个算法漏洞太多了
strlen如果结果为0呢?
你怎么办,
assert(s1&&s2);
static char szBuf[2的32次方-1];
char const*p=s1;
char const* q=szBuf;
while(*p!='\0')
{
*q++=*p+=;
};
p=s2;
while(*p!='\0');
{
*q++=*p++;
}
*q='\0';
return szBuf;
[解决办法]
其实他们考察的是 错误处理,比如参数为null
char* strcat(const char* a, const char* b)
{
int n1 = strlen(a), n2 = strlen(b); // a和b为null是可以计算长度的
int n = n1 + n2;
char* p = new char[n + 1];
if(n1)
memcpy(p, a, n1); // 你自己一个一个复制也可以
if(n2)
memcpy(p + n1, b, n2);
p[n] = '\0';
return p;
}
[解决办法]
BUF_SIZE初始化为1024, 忘改了.
char * strcat(const char *strA, const char *strB)
{
if (strA == NULL
[解决办法]
strB == NULL) return NULL;
size_t BUF_SIZE = 1024, size = 0;
char* buf = NULL;
while (*strA != '\0'
[解决办法]
*strB != '\0'
[解决办法]
size >= BUF_SIZE)
{
if (!buf && !(buf = (char*)malloc(BUF_SIZE))) return NULL;
if (size >= BUF_SIZE && !(buf = (char*)realloc(buf, BUF_SIZE <<= 1)) && (free(buf), true)) return NULL;
while (*strA != '\0' && size < BUF_SIZE) buf[size++] = *strA++;
while (*strB != '\0' && size < BUF_SIZE) buf[size++] = *strB++;
}
return (buf[size] = '\0', (char*)realloc(buf, size+1));
}