将字符串连接到指针变量的末尾

时间:2016-02-10 23:03:56

标签: c arrays string string-concatenation

对于某个功能有困难,对C来说相当新。该函数假设将str连接到* destp的末尾。通过调用kstrextend(),首先将* destp扩展为足以保存两个字符串的内容。然后将src的内容复制到dest中。

这是我现在的代码,只是因为它编译。我想改变所以我可以调用我的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';
   }

2 个答案:

答案 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;
}