这是我现在的代码,只是因为它编译。我想改变所以我可以调用我的kstrextend()函数重新分配内存。 此外,我正在运行测试用例,并且在请求两个空kstrings的" kstrcat之后我有一个核心转储。"
var n1 = Round(123/33,1)
var n2 = Round(100/25.003)
Concat("between ", Format("zzz9.z", n1), " and ", Format("zzz9.z", n2))
此处还有我的kstrextend函数,以供参考或我可能需要更改的任何内容。
void kstrcat(kstring *destp, kstring src)
{
int lenDest = destp->length;
//int lenSrc = src.length;
destp = realloc(destp,lenDest*sizeof(char));
int i = 0;
while(src.data[i] != '\0')
{
destp->data[i+lenDest+1] = src.data[i];
}
destp->data[i+lenDest+1] = '\0';
}
答案 0 :(得分:0)
分配到目标字符串时,不应将1添加到索引。这将留下结束目标字符串的空字节,而不是用源的第一个字节覆盖它。
此外,您忘记在循环中增加i
。
void kstrcat(kstring *destp, kstring src)
{
int lenDest = destp->length;
int lenSrc = src.length;
kstrextend(destp, lenDest + lenSrc);
int i = 0;
while(src.data[i] != '\0')
{
destp->data[i+lenDest] = src.data[i];
i++;
}
destp->data[i+lenDest] = '\0';
}
答案 1 :(得分:-1)
这是连接两个字符串
的方法char *strcat(char *dest, char *src)
{
char *pend;
/* make pend point to end of dest */
for (pend = dest; *pend; ++pend)
;
/* copy src to pend. Assume dest has enough space */
while (*pend++ = *src++)
;
/* null terminate dest */
*pend = 0;
return dest;
}