flaw found [in my own program]
Gary Kline
kline at thought.org
Tue Jun 9 23:40:45 UTC 2009
On Tue, Jun 09, 2009 at 06:19:21PM -0500, Jeffrey Goldberg wrote:
> On Jun 8, 2009, at 7:15 PM, Gary Kline wrote:
>
> > not surprisingly, i found a fla w in my getc(fp) program that
> > tried to read past "<?" and "?>" ... the example i added to my
> > test file was simply the 2 bytes "<" and "?". so if you have a
> > stray
> >
> > "<?"
> >
> > with a matching close case, the binary hangs on a read.
> > so, again, can anybody suggest a better example, in C, to get
> > past two delimiters?
>
> Back in the days when I taught introductory C programming, one the the
> early homework assignments was to write a filter that would strip C-
> style comments. As a follow-up they had to do this allowing for
> nested comments.
>
> I don't think I can recover things from the back-up tapes that I have
> for that corse material, but the approach I directed people toward was
> to have a variable, let's call it status that records one of four states
>
> OUTSIDE /* just reading normally, not in the material to be striped
> */
> AFTER_LT /* You've read in a '<' and are looking for a '?' */
> INSIDE /* You are in the material to be stripped */
> AFTER_Q /* You are in the material to be stripped and have just
> read a '?' */
>
> then use a switch statement on the character you are reading in.
>
> switch(c) {
> case '<': ...
> case '?': ...
> case '>': ...
> case EOF: ...
> default: ...
> }
>
> In each case, you look at the current state, decide whether the write
> 'c' to output and what state to change to. The most common mistake
> students would make would be to forget the EOF case. I suspect that
> you may have done the same.
>
> -j
:-)
yup, this is definitely better that initial approach. i have improved my
function to return a 1 after "?", 2 after a "?>" and a 3 if both are
found. i still think my function hangs in an loop if only the opening php
token is found.
thanks for the idea!
gary
>
--
Gary Kline kline at thought.org http://www.thought.org Public Service Unix
http://jottings.thought.org http://transfinite.thought.org
For FBSD list: http://transfinite.thought.org/slicejourney.php
The 4.91a release of Jottings: http://jottings.thought.org/index.php
More information about the freebsd-questions
mailing list