问题描述
我正在创建一些代码来“解析”一个IP地址。基本上,我正在使用一些旧代码,这些旧代码仅接受“ AAA.BBB.CCC.DDD”形式的IP地址,并希望编写类似“ 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。有更好的结构可用。