Re: unexpected result
- From: "Richard G. Riley" <rgrdev@xxxxxxxxx>
- Date: 12 Mar 2006 11:13:24 GMT
On 2006-03-12, Richard Heathfield <invalid@xxxxxxxxxxxxxxx> wrote:
jaysome said:
<snip>
<dialogue>
Son: "Dad, I want to learn how to program in C."
Dad: "Son, although I admire your goal, I've been reading a lot in CLC
lately, and based on what they're saying in there, I'm pretty shocked
about how a simple, honest mistake you might make could lead to
formatting my hard drive. So I have to say no on this one."
In 1989, I was learning C. The guy sitting next to me was learning C too. He
omitted to provide sufficient storage for a string. (He was just one byte
short.) When the program ran, he saw pretty much what he expected to see,
just general student-program output, you know the stuff - and then, at the
bottom there, it said something like:
"Do you really want to format C: (Y/N)?"
He was *very* fortunate. The result of this particular instance of undefined
behaviour appears to have been a jump into "the system" - and if it had
jumped just a bit further, he could well have had his hard drive formatted
without being asked. No, I'm not making this up.
Yes you are :) Scare mongerer you ... Sounds more like you modified
his program to make him pap his kecks ...
It was clearly a PC then? DOS?
The following year, I'd managed to find a job as a C programmer. A colleague
of mine had clearly been on the Intermediate C course and the Advanced C
course, but had unaccountably failed to turn up for the Basic C course. He
made *exactly the same error* (i.e. an array that was one byte too short
for the string being stored there), and this time it did actually trash the
machine, to the extent that it wouldn't even boot until we started feeding
diagnostic diskettes into it.
If he had done an advanced C course and an Intermediate C course then
he presumably knew about buffer issues in C. It is impossible that he
didnt or his intermediate and his advanced programs would have failed too.
Good C programmers frequently get the count wrong on array traversal :
and it doesnt cause your hard disk to get erased. All programmers are
human.
Well, in 99.99999999999999% of the cases. The old "n-1" will haunt C
programmers for years no matter good : its experience which means we
avoid it most of the time.
(Oh and did I mention a good debugger would catch it too ..)
Your "Dad" character is quite right. Leave C well alone unless you're
prepared to spend the time and effort it takes to get it right.
Alternatively, jump in there with a good book and have a lot fun
learning the language. If you worried that your hard disk would melt
for every out of control memory access you have in C then trust me, C
would be history by now.
.
- Follow-Ups:
- Re: unexpected result
- From: Mark McIntyre
- Re: unexpected result
- From: Keith Thompson
- Re: unexpected result
- From: Michael Mair
- Re: unexpected result
- References:
- unexpected result
- From: ashu
- Re: unexpected result
- From: Ankur
- Re: unexpected result
- From: Jack Klein
- Re: unexpected result
- From: jaysome
- Re: unexpected result
- From: Keith Thompson
- Re: unexpected result
- From: jaysome
- Re: unexpected result
- From: Richard Heathfield
- unexpected result
- Prev by Date: Re: give me some tips
- Next by Date: Re: Number of Years
- Previous by thread: Re: unexpected result
- Next by thread: Re: unexpected result
- Index(es):
Relevant Pages
|