Re: strtok - strings without delimiters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, May 19, 2013 at 10:46:49PM +0200, Michael Kerrisk wrote:

Hi,

> On 05/12/13 22:22, Georg Sauthoff wrote:
> > the strtok man-page does not specify what happens if `str` does not
> > contain any `delim`iters.

> > If you don't already know strtok one might assume then either:

> > - the delimiter-less string is considered the next token and thus
> >   returned upon the first call to strtok
> > - on the first call NULL is returned because there are not any tokens

> > Related issue: is the non-empty `str`-suffix after the last `delim`
> > returned as a token or not?
 
> Thanks for the report, though I must say that it would have been a 
> little more helpful if you had answered the rhetorical questions you 
> ask... (It would have aided me as I reminded myself of the details.)

oh, sorry, you are right.

> > I know how strtok works - 
>
> In which case a patch would have made the bug report even better still!

Ok, next time.

> > but perhaps it makes sense to explicitly
> > address these issues in the Linux man page.
 
> Anyway, I agree that the page could be clearer. I've added the following text:
 
>        A sequence of calls to strtok() that operate on the same string
>        maintains  a  pointer  that  determines the point from which to
>        start searching for the next token.  The first call to strtok()
>        sets  this  pointer  to  point to the first byte of the string.

>        The start of the next token is determined by  scanning  forward
>        for  the  next  nondelimiter  byte  in  str.  If such a byte is
>        found, it is taken as the start of the next token.  If no  such
>        byte  is  found,  then  there  are no more tokens, and strtok()
>        returns NULL.  (A string that is empty or  that  contains  only
>        delimiter  will thus cause strtok() to return NULL on the first

plural, delimiters?

>        call.)
> 
>        The end of each token is found by scanning forward until either
>        the  next delimiter byte is found or until the terminating null
>        byte ('\0') is encountered.  If a delimiter byte is  found,  it
>        is overwritten with a null byte to terminate the current token,
>        and strtok() saves  a  pointer  to  the  following  byte;  that
>        pointer  will  be used as the starting point when searching for
>        the next token.  In this case, strtok() returns  a  pointer  to
>        the start of the found token.

>        From  the above description, it follows thatt a sequence of two

typo: /thatt/that/

>        or more contiguous delimiter bytes in the parsed string is con‐
>        sidered  to  be a single delimiter, and that delimiter bytes at
>        the start or end of the string are ignored.  Put  another  way:
>        the  tokens  returned  by strtok() are always nonempty strings.
>        Thus, for example, given  the  string  "aaa;;bbb,",  successive
>        calls  to strtok() that specify the delimiter string ";," would
>        return the strings "aaa" and "bbb", and then a NULL pointer.
 
> Sufficient?

Yes!

Best regards
Georg
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux