用指针编写strcat函数

时间:2017-03-20 09:35:50

标签: c++

我正在尝试使用基本的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 != '\0')
    {
        cout << *array3;
        array3++;
    }
}

char * stuff(char *s1, const char *s2)
{
    char *p = s1;
    while (*p != '\0')
    {
        p++;
    }
    while (*s2 != '\0')
    {
        *p = *s2;

        p++;
        s2++;
    }
    return s1;
}

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您的问题的解决方案:

你的程序应该是这样的:

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 != '\0')
    {
        p++;
    }

    while (*s2 != '\0')
    {
        *p++ = *s2++;
    }
    return s1;
}

您的代码存在其他问题:

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

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