函数功能:把c语言字符串颠倒s按照c语言字符串颠倒delim进行分割然后返回分割的结果。
1.strtok函数的实质上的处理是strtok在s中查找包含在delim中的字符并用NULL(’/0′)来替换,直到找遍整个c语言芓符串颠倒。这句话有两层含义:(1)每次调用strtok函数只能获得一个分割单位(2)要获得所有的分割单元必须反复调用strtok函数。
3.形参s(要分割嘚c语言字符串颠倒)对应的变量应用char s[]=”….”形式而不能用char *s=”….”形式。
当这两个语句编译后编译器会将“abc”放在常量区中,而strtok(char *s, char *delim)函数是在sΦ查找包含在delim中的字符并用NULL(’/0′)来替换,直到找遍整个c语言字符串颠倒这句话就能体现指针和数组的区别:既然查找就要p++/b++。 要替换成(‘/0’),那么就要对*p/*b赋值
p指针是指向常量c语言字符串颠倒的对*p操作就是对c语言字符串颠倒操作,这显然会编译不通过的
b是字符数组的首地址,这个数组里面的元素是‘a’、'b'、'c'、'/0',和c语言字符串颠倒“abc”看上去是一样不过并不是同一个。相当于b数组里可以存放其他东西'1'、'2'、'3'、'/0',只不过在编译到char b[]="abc";后给这个b数组里的元素值改变了,所以对*b的操作并不影响c语言字符串颠倒
*p),它的作用就是令p=s,用于保存s的起始地址。由於在随后的处理中指针p的值会一直保存(C语言中指针的特点)因此在以后的strtok调用中用NULL来代替s的原因就是防止p被重新赋值而指向s的起始地址,从而可以保证p可以指向s的其他位置直到最后分割完整个c语言字符串颠倒。 但是如果用s来代替NULL那么每次调用strtok时,p就会指向s的初始地址从而只能获得第一个分割出来的字串,如上面的例子中while会是一个无限循环而输出的结果只能是“Golden”。