当前位置: 技术问答>linux和unix
下面这个程序编译后通过,运行时显示“段错误”,为什么呀,怎么改?
来源: 互联网 发布时间:2015-12-12
本文导语: 下面这个程序编译后通过,运行时显示“段错误”,为什么呀,怎么改? #include #include int main() { char *s="Golden Global View"; char *d=" "; char *p; p=strtok(s,d); while(p) { printf...
下面这个程序编译后通过,运行时显示“段错误”,为什么呀,怎么改?
#include
#include
int main()
{
char *s="Golden Global View";
char *d=" ";
char *p;
p=strtok(s,d);
while(p)
{
printf("%sn",s);
strtok(NULL,d);
}
getchar();
return 0;
}
#include
#include
int main()
{
char *s="Golden Global View";
char *d=" ";
char *p;
p=strtok(s,d);
while(p)
{
printf("%sn",s);
strtok(NULL,d);
}
getchar();
return 0;
}
|
char *strtok(char *str1, char *str2);
看定义str1不是const的,说明在strtok里会修改str1的值。而你的s定义在只读区域,不能修改。
修改:
将char *s = "... ...";改为char s[128]="... ...";
看定义str1不是const的,说明在strtok里会修改str1的值。而你的s定义在只读区域,不能修改。
修改:
将char *s = "... ...";改为char s[128]="... ...";
|
倒不是分配空间的问题,1楼的解释很对, const的问题, 因为char *s="Golden Global View";和char s[]="Golden Global View";是有区别的。
while循环还需要改一下,要不然打印信息就没有什么意义了
while(p)
{
printf("%sn",p);
p=strtok(NULL,d);
}
while循环还需要改一下,要不然打印信息就没有什么意义了
while(p)
{
printf("%sn",p);
p=strtok(NULL,d);
}
|
char *s="Golden Global View";改为char s[]="Golden Global View";
while循环改为
while(p)
{
printf("%sn",s);
p=strtok(NULL,d);
}
while循环改为
while(p)
{
printf("%sn",s);
p=strtok(NULL,d);
}
|
全是不分配空间就开始操作.