need C help, passing char buffer[] by-value....
Gary Kline
kline at thought.org
Mon Oct 19 17:06:40 UTC 2009
On Mon, Oct 19, 2009 at 01:48:42AM -0400, Brad Mettee wrote:
> Gary Kline wrote:
> >Guys,
> >
> >maybe this can't be done reading in a file with fgets(buffer[128], fp),
> >then calling skiptags(), conditionally, to while () past ',' and '>'.
> >
> >I know I need to calll skipTags with its address, skipTags(&buffer);, but
> >then how to i
> >handle the variable "s" in skipTags? Anybody?
> >
> >
> >
> >
> >// redo, skip TAGS
> >skipTags((char *)&s)
> >{
> > if (*s == '<')
> > {
> > while (*s != '>')
> > {
> > s++;
> > }
> > s++;
> > }
> >}
> >
> Your function may not work exactly as you think it will. Your basic idea
> runs on the assumption that the tag will never be broken during the file
> read. It's possible that you'll read "some data<Tag begin" and the next
> read will have ">more data here<tag ends>", or some variation thereof.
> If you know for a fact that the string you read in will always be
> complete, then what's below should work fine:
>
> // where *s is the address of a string to be parsed
> // maxlen represents the maximum number of chars potentially in the string
> and is not zero based (ie: maxlen 256 = char positions 0-255)
> // *curpos is the current position of the pointer (this prevents bounds
> errors)
> skipTags(char *s, long maxlen, long *curpos)
> {
> if (*s == '<')
> {
> while (*s != '>' && && *s && *curpos < maxlen)
> {
> s++;
> (*curpos)++;
> }
> if (*curpos < maxlen)
> {
> s++;
> (*curpos)++;
> }
> }
> }
>
> When you read in the next line of the file, reset curpos to zero, set
> maxlen to number of bytes read. As you process each char after the
> function is called, you'll need to increment curpos as well.
>
> Depending on the size of the files you are reading, you may be able to
> read the entire file into memory at once and avoid any possible TAG
> splitting.
>
> If you explain exactly what you're trying to accomplish, we may be able
> to come up with an easier/cleaner solution.
>
> (warning: none of the above code is tested, but in concept it should
> work ok)
>
It didn't core dump, but neither work. Basically, I'm doing a read via fgets:
"while(fgets(buf, sizeof buf, fp_in)) {"
an HTML or other file with <TAGS>. Optionally, say, given the switch -N,
the program would NOT progress any of the HTML tags; It would only touch other
stuff in the file. Simply put, I have a fixed buffer, buf[1024], that I want to
change --i think by-reference-----not certain-----by calling
skiptags(*&buf); and skiptags() would read past the <WHATEVER="7" FOO="6" BAR="Times">
and return the buffer to the place after fgets() where skiptags(&buf) is called
missing all markup <TAGS>.
I'm better at by-refernce with ints that chars, so I don't know how far off I am
here. That's why I;'m asking you guys.
gary
--
Gary Kline kline at thought.org http://www.thought.org Public Service Unix
http://jottings.thought.org http://transfinite.thought.org
The 7.31a release of Jottings: http://jottings.thought.org/index.php
More information about the freebsd-questions
mailing list