答案:char* string="This is a sample string, which can be separated into 12 tokens."
这样string定义到了【文字常量区】(你要重点理解这个)
使得string成为了一个指向常量的指针,也就是其所指内容不可更改
而strtok函数需要更改第一个参数,从而导致错误。
错误号应该为
*.exe中有未经处理的异常:0x*写入位置0x*时发生访问冲突
更改为char []后string分配在栈上,即可更改内容。
其他:char *string是定义一个指针。
char shtring[]是定义一个字符数组,长度由初始化字符串决定;同时也可以表示指向字符数组的指针,而在c里面字符串就是以‘\00’结尾的字符数组。 char* string 定义的是一个指针,指向的是字符串常量,该内容位于静态区内存,既然是常量,内容就无法修改。
char string[],定义的是字符数组, 该字符数组是栈内存,用户可以修改其中内容..
程序是在strtok函数内挂掉的,这个字符串拆分函数一定是对string内存进行了修改,导致崩溃。
例如 char *p1 = "Hello";
p1[0] = 'A'; // 出错
char p2[] = "Hello";
p2[0] = 'A'; // 正常
你遇到的问题 其实跟这个差不多类似
上一个:c++队列问题 从第一张牌仍掉开始,把第一张牌扔掉,然后开始把新的第一张放在整碟牌的后面。
下一个:string s; cout<<s[0]<<endl;合法吗