c语言 strtok请教

来源:百度知道 编辑:UC知道 时间:2024/05/21 21:14:34
这个函数返回的值是一个字符串指针,但当函数返回时,这个指针所指的字符串已经随函数执行完毕后被回收了,怎么会由函数的返回值得到字符串的呢?

以前我也被用字符串做参数和做返回值的函数该怎么写的问题困扰,我现在知道只要函数的任何一个参数被返回值所指,就能保证返回值所指的变量不会被回收(这样的返回值好象有点多余),但strtok函数的2个参数中的任何一个都和返回值所指的字符串不同,那么微软是如何实现,让函数返回的指针所指的字符串不被回收的呢?请大家给予指点!

我还做过实验,在第二次和以后调用strtok也就是把函数第一个参数设为NULL时,我用字符串指针数组分别保存strtok返回的指针,发现这些指针所指的内存地址都不同,到底是怎么实现的呢?

高手帮我解答一下吧,谢谢~

恩, 虽然没有看过strtok的实现
不过下面这个, 即时效果应该相同的(每执行一次函数的效果); 测试代码是直接复制msdn里的, 我只写mytoken
(当然如果你原意给点分的话:p)

#include <stdio.h>

char* MyToken( char *strToken, const char *strDelimit );

int main( void )
{
char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;

printf( "Tokens:\n" );

// Establish string and get the first token:
token = MyToken( string, seps ); // C4996
// Note: strtok is deprecated; consider using strtok_s instead
while( token != NULL )
{
// While there are tokens in "string"
printf( "%s\n", token );

// Get next token:
token = MyToken( NULL, seps ); // C4996
}
}
typedef int BOOL;
#define TRUE 1
#define FALSE 0

BOOL InSide( char c, const char *str )
{
while( 0 !