Tim Daneliuk wrote:
Tim Daneliuk wrote:
Gary Kline wrote:
    To my fellow C nerds,

    It's been a  great manny years since I wrote this appended
    snippet.  Now I can't remember why (of if ) I need all the
strcpy() calls. Is there a simpler, more logical way of printing a bunch of string by snipping off the left-most?

    In short,, can anyone 'splain why strtok needs all this?

    tia,

    gary



I don't think you need the copies.  This works just as well:

#include <stdio.h>
#include <string.h>

main()
{
  char *bp, *tok;
  char *delim=" ", s1[256]="abc def ghi jkl mno.";

  bp = s1;   /* Now both point to the literal string to be tokenized */

  while ((tok = strtok(bp, delim)) != NULL)
  {
    bp = NULL;
    printf("tok = [%s]\n", tok);
  }
}



Ooops ... wasn't paying attention. While the printed output is the same, doing it this way is destructive to the original s1 string - which may matter (or not)...

So, to protect the original string, you do have to copy the original
string to a new buffer:


#include <stdio.h>
#include <string.h>

main()
{
  char *bp, *tok, buf[256];
  const char *delim=" ", s1[256]="abc def ghi jkl mno.";

  bp = strcpy(buf, s1);

  while ((tok = strtok(bp, delim)) != NULL)
  {
    bp = NULL;
    printf("tok = [%s]\n", tok);
  }
}


So, at least we eliminated the first strcpy in your code:

  char *bp, buf[512], *tok, tstr[512];
  static char *delim=" ", s1[256]="abc def ghi jkl mno.";

  bp = strcpy(buf, tstr);

This accomplishes nothing and may not even be safe - strcpy() copies
until it hits \0.  I do not recall if the declaration of tstr[512]
intializes it to \0.  If not, then the strcpy() is going to keep
running until it finds one, overwriting the end of buf[] and probably
causing core dumps or other evil...
--
----------------------------------------------------------------------------
Tim Daneliuk     [EMAIL PROTECTED]
PGP Key:         http://www.tundraware.com/PGP/

_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to