在unix中strtok函数使用需注意

简介: 虽然strtok的函数原型是   extern char *strtok(char *s, char *delim);          用法:#include     功能:分解字符串为一组标记串。
虽然strtok的函数原型是

  extern char *strtok(char *s, char *delim);
       
  用法:#include
 
  功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。
 
  说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。
        strtok在s中查找包含在delim中的字符并用NULL('/0')来替换,直到找遍整个字符串。
        返回指向下一个标记串。当没有标记串时则返回空字符NULL。

 

 

但是如果是下面的用法,则是错误的:

    char *s="zgbfg|zlkjksajflasf";

    char * p1=strtok(s,"|");

理由是,s字符串指针指向的是一个常数字符串。

而strtok是需要分割字符,并相应的把传入的s进行裁剪,但是由于s指向的是个常数字符串,所以会导致出错。

如果是下面的用法则不会出错。

char  s[256]="zgbfg|zlkjksajflasf";

char * p1=strtok(s,"|");

 

这是s是个字符串数组,第一句话会将字符串赋值给s。而s这个时候是个局部的字符串变量,可以被strtok修改。

相关文章
|
关系型数据库 MySQL Unix
MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解
MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解
211 0
在unix中strtok函数使用需注意
功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。
|
Unix Linux
【Unix/Linux 系统管理】命令行参数与函数
【Unix/Linux 系统管理】命令行参数与函数
96 0
|
关系型数据库 MySQL
mysql 中 unix_timestamp和from_unixtime函数
1.unix_timestamp 将时间转化为时间戳。(date 类型数据转换成 timestamp 形式整数) 没传时间参数则取当前时间的时间戳 mysql> select unix_timestamp();+------------------+| unix_timestamp() |+----...
1147 0
|
网络协议 Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.15 使用select函数的TCP和UDP回射服务器程序
我们调用select只是为了等待监听TCP套接字的可读条件或UDP套接字的可读条件。既然我们的sig_chld信号处理函数可能中断我们对select的调用,我们于是需要处理EINTR错误。
1829 0
|
JavaScript 网络协议 Unix
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.12 dg_cli函数(修订版)
所做的修改是调用connect,并以read和write调用代替sendto和recvfrom调用。该函数不查看传递给connect的套接字地址结构的内容,因此它仍然是协议无关的。图8-7中的客户程序main函数保持不变。
1606 0
|
Unix C++ Shell
unix环境高级编程-4.11-chown,fchown和lchown函数
接下来讲的函数主要是用来更改文件的用户ID和,组ID。 [cpp] view plaincopy #include       int chown(const char* pa...
863 0
|
Unix API C语言
《UNIX网络编程 卷1:套接字联网API(第3版)》——1.4 错误处理:包裹函数
任何现实世界的程序都必须检查每个函数调用是否返回错误。在图1-5所示的程序中,我们检查socket、inet_pton、connect、read和fputs函数是否返回错误,当发生错误时,就调用我们自己的err_quit或err_sys函数输出一个出错消息并终止程序的运行。
1272 0