Re: low-level question
- From: "Robert Gamble" <rgamble99@xxxxxxxxx>
- Date: 30 Aug 2005 05:48:36 -0700
jesso wrote:
> I couldn't get this on a midterm. Darn!
>
> Anyone want to help?
>
> 1. Why does the following program output a 0?
> 2. Explain in detail.
> 3. How could you prevent this outcome without changing the code?
>
>
> #include <stdio.h>
> #include <string.h>
>
> int
> main( int argc, char *argv[] )
> {
> int ii = 1;
> char buf[ 4 ];
>
> strcpy( buf, "AAAA" );
>
> printf( "%d\n", ii );
>
> return 0;
> }
It is undefined behavior in C because you are writing past the end of
an arry ("AAAA" is 5 characters, buf is 4). Since it is undefined
behavior, anything can happen. There might be certain behaviors that
are more likely to occur than others due to nuances of your specific
platform but I can't think of anything plausible that would account for
the behavior suggested by the question.
If ii was char then it might be plausible for ii to be located
immediately following the space allocated for buf in which case the
'\0' at the end of the string being copied may be written to ii making
it's value 0. This is still undefined behavior according to the
Standard though and would be completely implementation dependant.
Is this for a general C class or a compiler construction/assembly/etc
class?
Robert Gamble
.
- Follow-Ups:
- Re: low-level question
- From: Keith Thompson
- Re: low-level question
- References:
- low-level question
- From: jesso
- low-level question
- Prev by Date: Re: low-level question
- Next by Date: Re: while (1) vs. for ( ;; )
- Previous by thread: Re: low-level question
- Next by thread: Re: low-level question
- Index(es):
Relevant Pages
|