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指向的是常量字符串,这个是不可修改的
所以会报错。
[解决办法]
原型 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所指的内容不能修改。