读书人

strtok解决方法

发布时间: 2012-03-11 18:15:39 作者: rapoo

strtok
void teststrtok()
{
char *p = NULL;
char str[] = "this is my book"; //str 什不能使pointer?
p = strtok(str, " ");
while(p)
{
printf("%s\n", p);
p = strtok(NULL, " ");
}
}
解下,thanks!

[解决办法]
你的意思应该是这样的吧
char *sp="this is my book"
p=strtok(sp," ")

strok内部实现的原理是将所有出现在主字符串中的分隔字符串字符
替换为'\0',你若是用*sp,sp指向的是常量字符串,这个是不可修改的
所以会报错。
[解决办法]

C/C++ code
原型  char *strtok(char *s, const char *delim);编辑本段功能  分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。如果使用char p = "this is my book" ;  则p指向常量区,不可修改;char str[] = "this is my book"在堆栈,可修改;如:char p = "this is my book"p[0]='0';  //指向常量区,不可修改内容;char str[] = "this is my book"p[0]='0';   //堆栈可修改;这和你上面的题 是一个道理;
[解决办法]
你那样使用指针操作的是文字常量,当然会报错
这样使用指针就好了

char *str = new char[64];
strcpy(str,"this is my book");


[解决办法]
常量字符串放在静态数据区,
char str[] = "this is my book"; //将静态数据区的字符串"this is my book"拷贝一份到字符数组str中;
char p= "this is my book"; //直接将静态数据区的字符串"this is my book"的地址给p,因此p指向一个常量字符串,p所指的内容不能修改。

读书人网 >C语言

热点推荐