使用strlen()的字符指针长度不正确

时间:2017-07-02 13:48:24

标签: c++

我制作了自己的长度函数,它对于正常的字符数组来说非常完美,但是在指针的情况下,它并没有给出正确的结果。与strlen()函数相同。 让我们说我存储了#34;书籍"在指针字符数组a。它应该显示5作为长度,然后为什么它显示14

char * regrowchar(char *p, int size)
{
    char *q = p;
    p = new char[size];
    for (int i = 0; i < size; i++)
        p[i] = q[i];
    return p;
}

void input(char *a, int &size)
{
    int i = 0;
    cin >> a[i];
    while (1)
    {
        size++;
        a = regrowchar(a, size);
        i++;
        cin.get(a[i]);
        if (a[i] == '\n')
        {
            a[i] = '\0';
            break;
        }
    }
}

int main()
{
    int size1 = 1;
    int size2 = 1;
    char * a = new char[size1];
    char * b = new char[size2];

    input(a, size1);
    input(b, size2);

    cout << strlen(a) << "   " << strlen(b) << endl;
}

1 个答案:

答案 0 :(得分:-3)

参数a(指针)按值传递给input()。因此,a = regrowchar(a, size)无法看到更改main()。通过引用传递它。此外,虽然您还没有问过,但是您的代码会泄漏内存,因为它会动态分配但永远不会释放内存。 https://stackoverflow.com/users/4706785/peter