c - Difference between array and malloc -


here code :

#include<stdio.h> #include <stdlib.h>  #define len 2  int main(void) {      char num1[len],num2[len];   //works fine                                 //char *num1= malloc(len), *num2= malloc(len);     int number1,number2;     int sum;      printf("first integer add = ");     scanf("%s",num1);      printf("second integer add = ");     scanf("%s",num2);      //adds integers     number1= atoi(num1);     number2= atoi(num2);     sum = number1 + number2;      //prints sum     printf("sum of %d , %d = %d \n",number1, number2, sum);      return 0; } 

here output :

first integer add = 15 second integer add = 12 sum of 0 , 12 = 12 

why taking 0 instead of first variable 15 ?

could not understand why happening.

it working fine if using

char *num1= malloc(len), *num2= malloc(len); 

instead of

char num1[len],num2[len]; 

but should work fine this.

edited :

yes, worked len 3 why showed undefined behaviour. mean not working normal arrays , working malloc. got should not work malloc also. why worked me, please specific can debug more accurately ?

is there issue system or compiler or ide ?

please explain bit more helpful or provide links resources. because don't want unlucky anymore.

len defined 2. left no room null terminator. in array case overrun array end , damage stack. in malloc case overrun heap , potentially damage malloc structures.

both undefined behaviour. unlucky code works @ all: if "lucky", program decide crash in every case show you triggering undefined behaviour. unfortunately that's not how undefined behaviour works, c programmer, have defensive , avoid entering undefined behaviour situations.

why using strings, anyway? use scanf("%d", &number1) , can avoid of this.


Comments

Popular posts from this blog

javascript - how to protect a flash video from refresh? -

android - Associate same looper with different threads -

visual studio 2010 - Connect to informix database windows form application -