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