C++小问题!
人气:
【字体:大 中 小】
发布时间:2008-09-11 12:47:43
>>>>>>>>提问#include <string.h>
#include <stdio.h>
int main()
{
char *s="Golden Global View";
char *p;
p=strtok(s," ");
while(1)
{
printf("%s\n",s);
p=strtok(NULL," ");
if (p==0)
{
break;
}
}
return 0;
}
上面代码为什么把char *s="Golden Global View";
换成char s〔256〕="Golden Global View";就好使了呢?
想不通。。。
还有想问你:你说数组S在栈上分配一个字符数组,所以可以改变栈上的常量字符串,那指针S是存哪的?
休 闲 居 编辑
>>>>>>>>休闲养生网回答:如果 char *s="Golden Global View";
在执行 p=strtok(s," "); 这条语句时会出错,为什么呢????
你在因为strtok()的函数原型是:
_CRTIMP char * __cdecl strtok(char *, const char *);
你要看好了,第一个参数类型是"char *",而不是"const char *",也就是说没有那个"const",所以错误的原因是,库函数strtok会改变指针s的值,会出错.......
根本上说:
后者,也就是数组s在栈上分配了一个字符数组。
这两样的区别体现在strtok()的不同就是,执行库函数strtok()时,将修改其第一个参数的内容,但是一个字符常量是不允许程序在运行过程中修改其内容的,而上述栈上分配的字符数组则没有这个要求。
看不懂你的补充~~我的意思是,数组s是指针常量,不能被改变,它行的通,而char *s;中的s是指针变量,它的值可以被改变,所以行不通...
≡ 查看、发表评论 ≡