in Programming in C edited by
745 views
2 votes
2 votes
char buffer[6]=”hello”;
char *prt1=buffer -1; /* undefined behavior */
char *ptr2 = buffer +5;  /*Ok, pointing to the ‘\0’ inside the array */
char *ptr3 = buffer +6;  /* OK, pointing to just beyond */
char *ptr4 = buffer +7;  /* undefined behavior */

Please clear last two line.. and why 2nd last is not undefined behavior.

in Programming in C edited by
by
745 views

2 Comments

it should show undefined because it is pointing outside of allocated memory location ,rt?
0
0
yes, @Kapil, @ManojK , @Arjun Sir, Please help ...
0
0

2 Answers

5 votes
5 votes
Best answer
char buffer[6]=”hello”;
char *prt1=buffer -1; /* undefined behavior */
char *ptr2 = buffer +5;  /*Ok, pointing to the ‘\0’ inside the array */
char *ptr3 = buffer +6;  /* OK, pointing to just beyond */
char *ptr4 = buffer +7;  /* undefined behavior */

char *ptr3 = buffer + 6 is valid, as we are allowed to legally point to one past the last array element until we dereference it .

Actually, Setting a pointer one past the last element of an array is allowed in C and C++. 

Hence, setting to pointer after '\0' ends in an array is allowed for only one position .

Ex => char buffer[8] = "vijaycs"

so, buffer + 7 returns '\0' which is surely allowed .

and Setting a pointer to  buffer + 8(one past the last array element) is also valid, until it is dereferenced like

buffer[8] or *(buffer + 8), as it is not legal to access the contents of an address outside the allocated memory for an array.

Hence, after this setting a pointer to buffer + 9 and onwards is undefined behaviour .

You can read more here => https://gcc.gnu.org/onlinedocs/libstdc++/manual/iterators.html

selected by
by

4 Comments

""""Now going beyond one past of array means array out of bound checking .As C does not have array of bund checking so as  C standard is concerned, accessing an array outside its bounds has "undefined behavior".""""

Setting a pointer for one past the last array element is fine , but, accessing that memory location is undefined behaviour ( sometimes, it is segmentation fault ) . 

how this works?

take one past the last array element memory location and set a pointer "last" to that location.

char* last = buffer + 8;

For(char* str = buffer ; str < last ; str ++)

{.............................}

Hence, accessing/Dereferencing past the last array element results in undefined behaviour .

0
0

Are you taliking about these two ?

#include<stdlib.h>
#include<stdio.h>
main()
{
   char buffer[6]="hello";
   char *ptr3 = buffer +8;
   char *str;
for(str=buffer;str<ptr3;str++)

    printf("%d \n",str);
}

And

#include<stdlib.h>
#include<stdio.h>
main()
{
   char buffer[6]="hello";


   char *ptr3 = buffer +8;
   char *str;
for(str=buffer;str<ptr3;str++)

    printf("%c \n",*str);
}
1
1
Yes, Now , u are accessing the contents of ptr, which is UB or segmentation fault .
0
0
2 votes
2 votes
by

Related questions