这种情况是否需要删除或创建新变量?

问题描述

我正在创建一些代码来“解析”一个IP地址。基本上,我正在使用一些旧代码,这些旧代码仅接受“ AAA.BBB.CCC.DDD”形式的I​​P地址,并希望编写类似“ 10.2.4.3”的代码,并且无需输入010.002就可以使代码正常工作.004.003。 IP地址保存在char指针中,我编写的将零添加代码中的函数返回了另一个char指针。可以使用以下主要功能(即没有内存泄漏或其他问题)吗?

char* parser(char* ip) {
    char out[16];    //16 is the length of the final IP address with the dots and \0 char at the end
    //find output char array
    return out;
}

int main() {
    char *a="10.2.4.3";
    a=parser(a);

    return 0;
}

虽然我对C ++中的内存泄漏问题的理解是,它们是由于先分配new而后没有删除,还是因分配new然后再重新分配而引起的,但我确实不确定这种情况。由于a是静态分配的,将其分配给在解析器函数中创建的char指针是否会导致任何类型的内存泄漏或其他问题?

解决方法

否,如果您不执行任何delete,则不需要new。但是您的程序遇到了另一个问题:

char* parser(char* ip) {
    char out[16];    //16 is the length of the final IP address with the dots and \0 char at the end
    //find output char array
    return out
}

这将返回一个悬空的指针。函数返回后,一旦重用返回的值,将是不安全的。

一种与您所拥有的最小差异的方法是:

void parser(const char* ip,char* out) {

    // todo: write to out here;
}

int main() 
{
    const char *a="10.2.4.3";
    char out[16];
    parser(a,out);

    return 0;
}

但是,这仍然看起来很像用C ++编译器编写的旧C。有更好的结构可用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...