Ok, now, I wouldnt normally do this, but I dont understand why this isnt working. Now, I know my getmask() function does practically nothing, but it serves its purpose for now. What my real problem is, is that when I try to strtok cSM, it seg faults. This is the EXACT SAME THING I am doing above with cIP, only difference is I'm taking the value from argv (which, I'm also going to add, when I change where Im getting cIP from (from argv to simple cIP="192.168.0.1") it crashes there too!). So my problem is, why the hell is strtok crashing? It's a char* filetype, so there shouldnt be ANY problems.
HELP!!!
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
char* getmask(int nCIDR);
int main(int argc, char* argv[])
{
int i;
int nCIDR;
int anIP[3];
int anSubMask[3];
char* cIP;
char* cSM;
char* ctemp;
int ntemp;
/*Make sure all arguments are there*/
if (argc!= 3)
{
printf("Invalid number of arguments inputted.\nPlease run program again.\nEnding program\n");
exit(1);
}
else
{
/*Copies in CIDR*/
nCIDR=atoi(argv[2]);
/*Copies in IP as CHAR*/
cIP=argv[1];
printf("IP: %s\nCIDR: %d\n", cIP, nCIDR);
/*Checks to see if CIDR is correct*/
if (nCIDR<0 || nCIDR>32)
{
printf("Please use a proper CIDR\nEnding program\n");
exit(1);
}
}
/*Convert IP to INT's*/
anIP[0]=atoi(strtok(cIP, "."));
/*Loop through and get rest of IP*/
for(i=1; i!=4; i++)
anIP[i]=atoi(strtok(NULL, "."));
printf("The four parts of the IP address is...\n1: %d\n2: %d\n3: %d\n4: %d\n",anIP[0],anIP[1],anIP[2],anIP[3]);
/*Get the Subnet Mask*/
cSM=getmask(nCIDR);
printf("Toking up with SubMask: %s\n", cSM);
ctemp=strtok(cSM,".");
printf("Stoned!");
anSubMask[0]=atoi(ctemp);
printf("BAM!\n");
/*Loop through and get rest of IP*/
/*for(i=1; i!=4; i++)
anSubMask[i]=atoi(strtok(NULL, "."));
printf("The four parts of the IP address is...\n1: %d\n2: %d\n3: %d\n4: %d\n",naIP[0],naIP[1],naIP[2],naIP[3]);
printf("The four parts of the SubNet Mask is...\n1: %d\n2: %d\n3: %d\n4: %d\n",anSubMask[0],anSubMask[1],anSubMask[2],anSubMask[3]);
*/
return(0);
}
char* getmask(int nCIDR)
{
char* cMask;
cMask="255.255.255.0";
return(cMask);
}