使用指针编写 strcat 函数

writing the strcat function with pointers

本文关键字:strcat 函数 指针      更新时间:2023-10-16

我正在尝试编写具有基本c ++功能的strcat函数。到目前为止,我想出了这个:我写了一个函数来完成这项工作,它返回一个指针:

char * stuff (char *s1, const char *s2);
int main(int argc, char** argv)
{
    char array[10] = "hello";
    char array2[30] = "good morning";
    char *array3 = new char[50];
    array3 = stuff(array, array2);
    while (*array3 != '')
    {
        cout << *array3;
        array3++;
    }
}
char * stuff(char *s1, const char *s2)
{
    char *p = s1;
    while (*p != '')
    {
        p++;
    }
    while (*s2 != '')
    {
        *p = *s2;
        p++;
        s2++;
    }
    return s1;
}

想知道是否有人可以帮助我通过基本编程修复此代码。我目前没有使用此代码获得任何输出,我认为问题在于我如何调用该函数,但我不确定。

发现了我的错误,我应该只打印第一个数组,因为它正在将第二个数组添加到第一个数组中。

问题是,您正在修改array,而不是array3array只有 9 个字符(+ 最后的零字节(的位置。

您的问题的解决方案:

你的程序应该是这样的:

char * stuff (char *s1, const char *s2);
int main(int argc, char** argv)
{
    char array[50] = "hello";           // make sure array has enough space
    char array2[30] = "good morning";
    stuff(array, array2);
    cout << array;                      // you can output char array directly, no need to traverse
}
char * stuff(char *s1, const char *s2)
{
    char *p = s1;
    while (*p != '')
    {
        p++;
    }
    while (*s2 != '')
    {
        *p++ = *s2++;
    }
    return s1;
}

代码的其他问题:

char *array3 = new char[50];
array3 = stuff(array, array2);

这是不对的。您为array3分配了内存,但您没有使用它。当您为array3分配新值时,50 字节的内存被泄漏。