首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

strtok解决方法

2012-03-11 
strtokvoid teststrtok(){char *p NULLchar str[] this is my book//str 為什麼不能使pointer?p

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所指的内容不能修改。

热点排行