strtok()思考
今天写一个比较函数,两个key前面相同,后面空格数目不同,不固定,所以写一个只比较空格前内容的函数,用strtok(),碰到一个知道但没想过的问题,记录下来。
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ch1 = "abcdef";
char *ch2 = "cd";
char *ch3 = NULL;
ch3 = strtok(ch1, ch2);
return 0;
}
这样编译是没问题的,但执行会段错误。因为strtok()的原型是char *strtok(char *cs, const char *ct),函数会改变cs的指向的内容,但ch1是字符串常量,在内存的静态区,是不可更改的,所以执行会但错误,给该成ch1[]会执行通过的,所以自己写函数,后来看linux函数库源码,发现linux已经将strtok删除了,变更为strsep()。
以前自己写代码,会避免这些错误,指针参数如果会在函数中变更其执行的内容,不能传入const(编译报错)、字符串常量(执行段错误),但用库函数的时候,需要确定,可以通过注意看函数原型,库函数一般不变更的指针参数,会执行为const的。
posted on 2012-07-05 22:36 kevin_kang 阅读(178) 评论(0) 收藏 举报
浙公网安备 33010602011771号