strtok程序为什么不能执行

来源:百度知道 编辑:UC知道 时间:2024/07/02 07:12:01
请各们大侠帮我看一下下面的程序,

小弟万分感谢!

#include<iostream.h>
#include<string.h>

void main()
{
char *a="y]ou are a ki'nd p?ers/on";

char *b="]'?/";

char *c=strtok(a,b);

cout<<c<<endl;

}

以上程序, 小弟在VC 6.0中实验了一下

但SYS WARN :“0X004035ff" 指令引用的0X00428025 内存
该内存不能为”written"

请各们大侠指教一下为什么,
(而如果以上程序 CHAR * 改为 数组的话,又可以运行。
但这是为什么呢?)


如果变量a这样定义:
char *a="y]ou are a ki'nd p?ers/on";
那么指针a指向的是一个字符串常量。
如果变量a这样定义:
char a[]="y]ou are a ki'nd p?ers/on";
那么数组a在栈上分配了一个字符数组。
这两样的区别体现在strtok()的不同就是,执行库函数strtok()时,将修改其第一个参数的内容,但是一个字符常量是不允许程序在运行过程中修改其内容的,而上述栈上分配的字符数组则没有这个要求。

因为你cout<<c<<endl;中c == NULL

你指针没弄明白
定义一个指针 就是 对如32位的机器就是分配4个字节的内从
而数组不一样,它是分配你数组大小的内存