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]"