我们来看一段代码
#include
#include
#include
int main ( void )
{
char *token;
char *line = "LINE TO BE SEPARATED";
char *search = " ";
/* Token will point to "LINE". */
token = strtok(line, search);
/* Token will point to "TO". */
// token = strtok(NULL, search);
return 0;
}
这段代码是从 linux 系统中通过 man strtok 得到的.
我们运行了一下
cc -o a a.c
./a
结果程序 code dump 了.
我们将上段程序放到 sco 上运行,程序可以正常通过,晕乎乎.
上述代码我们修改一下,
#include
#include
#include
int main ( void )
{
char *token;
char line[] = "LINE TO BE SEPARATED";
char *search = " ";
/* Token will point to "LINE". */
token = strtok(line, search);
/* Token will point to "TO". */
// token = strtok(NULL, search);
return 0;
}
程序可以正常通过.
我们观察发现 只是修改了 char *line 为 char line[] .
我们再来看看如下代码:
#include
#include
#include
int main ( void )
{
char s[]="1|2|3|4|||7";
char *p1=s;
char *p2;
while( (p2 = strtok(p1,"|")) != NULL )
{
fprintf(stderr,"%s\n",p2);
p1 = NULL ;
}
return 0;
}
这段代码可以正确执行,仔细思考一下其中的 s[] 和 *p1 = s 和第一段代码有什么不同,其实不过是对内存的分配上出现的问题,可能是不同的 C 编译器有所差异罢了.
^_^.
阅读(1428) | 评论(0) | 转发(0) |