char direccion_ip[16];
char *direccion_ip = (char*) malloc(sizeof(char)*16);
char *nmask;nmask="255."
char *nmask = new char[5];strncpy(nmask, "255.", 5);
#include <cstdlib>#include <cstring>#include <iostream>using namespace std;char * calcularMascara(int ntipo){ char *mask, *nmask, *punto; mask = new char[16]; // la cadena más grande que podemos tener es 255.255.255.255 más el carácter fin nmask = new char[5]; punto = new char[2]; // manera incorrecta de asignar un valor a un char* o char[], // debes usar strcpy o strncpy //nmask="255."; punto=""; // Lo mas correcto es borrar la memoria antes de que concatenes // de esa manera evitas concatenar con valores basura. // Para borrar de manera rapida la memoria dinamica se usa memset // Aqui para borrar podrias usar tambien strncpy(mask, "", 2); memset(mask, 0, sizeof(char)*16); memset(punto, 0, sizeof(char)*2); strncpy(nmask, "255.", 5); int num = 255; int signed desplaza=0; int unsigned nnum=0; while (ntipo>=0) { strcat(mask,punto); //punto="."; strncpy(punto, ".", 2); if (ntipo>8) { strcat(mask,"255"); ntipo=ntipo-8; } else { desplaza = (8-ntipo); if (desplaza==0 || ntipo==0) { //nmask=(char*)"000"; strncpy(nmask, "000", 4); } else { nnum = ntipo<<desplaza; // Manera incorrecta de convertir un int a char // para eso puedes usar sprintf() (portable) // o itoa() (no portable, pues no es funcion estandard) //nmask = ((char*)nnum); sprintf(nmask, "%d", nnum); } ntipo=ntipo-8; strcat(mask,nmask); // Aquí se la pega } } // recuerda liberar tu memoria dinamica cuando ya no la necesites. // No libero mask, porque es el puntero que regresa la funcion // pero debes liberarlo afuera. delete nmask; delete punto; return mask;}int main(){ char *mascara; // Aqui ya no es necesario usar new o malloc pues dentro de la funcion // ya lo estas usando para el puntero que regresas, pero despues de // que lo termines de ocupar liberalo. for (int i = 1; i < 32; i++) { mascara = calcularMascara(i); printf("%s\n", mascara); delete mascara; } return 0;}
#include <cstdio>char *calcularMascara(int ntipo){ char *mask = new char[16]; int a, b, c, d; a = b = c = d = 0; for (int i = 1; i <= ntipo; i++) { if (i <= 8) a = a + (1 << (8-i)); else if (i <= 16) b = b + (1 << (16-i)); else if (i <= 24) c = c + (1 << (24-i)); else if (i <= 32) d = d + (1 << (32-i)); } sprintf(mask, "%03d.%03d.%03d.%03d", a, b, c, d); return mask;}int main(){ char *mascara; for (int i = 1; i <= 32; i++) { mascara = calcularMascara(i); printf("%s\n", mascara); delete mascara; } return 0;}