4

Currently I have set up an array to hold 50 packets created by the program. However I would like to change this array to use malloc instead along with the use of storing a maximum of 50 pieces of information just as the current array does.

Here's the current code used to set up the array used under int main

struct packet create[50];
int countpackets = 0;

And the array is incremented within another function within the code as so

int add(struct packet *create, int countpackets){

char inputDest[10],inputType[4],inputPort[2],inputData[50],inputSource[10];

if (countpackets == 50){

puts("Too many packets already entered.");

}else{

printf("\n\n");

int i = 0;

printf("\t Source - Must be 1024 or below >\t");
scanf("%s", inputSource);
create[countpackets].source = atoi(inputSource);

for (i = 0; i < strlen(inputSource); i++){

 while(isdigit(inputSource[i])== 0 || create[countpackets].source > 1024){ 
 printf("************************************************** \n");
 puts("Invalid input, numbers only or number too big\n");
 printf("\t please re-enter your Source >");
 scanf("%s", inputSource); //rescans if it's a letter
 create[countpackets].source = atoi(inputSource);
 }
 }

 printf("\t Destination - Must be 1024 or below >\t");
 scanf("%s", inputDest);
 create[countpackets].destination = atoi(inputDest);

 for (i = 0; i < strlen(inputDest); i++)
 {

 while(isdigit(inputDest[i])== 0 || create[countpackets].destination > 1024){ 
 printf("************************************************** \n");
 puts("Invalid input, numbers only or number too big\n");
 printf("\t please re-enter your Destination >");
 scanf("%s", inputDest); //rescans if it's a letter
 create[countpackets].destination = atoi(inputDest);
 }
 }


 printf("\t Type - Must be 10 or below >\t");
 scanf("%s", inputType);
 create[countpackets].type = atoi(inputType);

 for (i = 0; i < strlen(inputType); i++){

 while(isdigit(inputType[i])== 0 || create[countpackets].type > 10){ 
  printf("************************************************** \n");
 puts("Invalid input, numbers only or number too big \t \n");
 printf("\t please re-enter your Type >");
 scanf("%s", inputType); //rescans if it's a letter
 create[countpackets].type = atoi(inputType);
 }
  }
 printf("\t Port - Must be 1024 or below >\t");
 scanf("%s", inputPort);
 create[countpackets].port = atoi(inputPort);

 for (i = 0; i < strlen(inputPort); i++)
 {

 while(isdigit(inputPort[i])== 0 || create[countpackets].port > 1024){
 printf("************************************************** \n");
 puts("Invalid input, numbers only or number too big \t \n");
 printf("\t please re-enter your Type >");
 scanf("%s", inputPort); //rescans if it's a letter
 create[countpackets].port = atoi(inputPort);
 }
 }

 printf("\t Data have less than 50 characters >\t");
 scanf("%s", inputData);

 for (i = 0; i < strlen(inputData); i++){
 while(isdigit(inputData[i])== 0){ //checks if it's a letter
 printf("************************************************** \n");
 puts("Invalid input, numbers only or number too big \t \n");
 printf("\t please re-enter your Type >");
 scanf("%s", inputData); //rescans if it's a letter
  }
 strcpy(create[countpackets].data, inputData);
  }
  }
  countpackets++;
  return countpackets;
  }

I'm pretty new to C and I do believe that is all the code I need to show, however if need be I will put up my full program. Any help would be much appreciated.

1 Answer 1

2

If you want to declare this...

struct packet create[50];

...with malloc, you'll have to do this...

struct packet *pCreate = malloc(50 * sizeof(struct packet));

You can use it the same.

create[0] = pCreate[0];   // First element
create[49] = pCreate[49]; // Last element
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.