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

Does this situation require a delete or making a new variable?

我正在创建一些代码来“解析”IP 地址。基本上,我正在使用一些遗留代码,这些代码只接受“AAA.BBB.CCC.DDD”形式的 IP 地址,并希望编写类似“10.2.4.3”的内容,并且代码无需输入 010.002.004.003 即可工作. IP 地址保存在一个字符指针中,我编写的函数将零添加到代码 returns 另一个字符指针中。下面的主函数是否可以使用(即没有内存泄漏或其他问题)?

char* parser(char* ip) {
    char out[16];    //16 is the length of the final IP address with the dots and [=10=] 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 指针是否会导致任何类型的内存泄漏或其他问题?

不,如果您不做任何 new,则不需要 delete。但是您的程序遇到了不同的问题:

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

这returns 一个悬挂指针。访问返回值是不安全的,因为它会在函数 returns.

后立即被重用

一种与您所拥有的略有不同的解决方法是:

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。有更好的结构可用。