读书人

请帮忙看看下面的指针赋值为什么会错解

发布时间: 2012-04-08 14:38:30 作者: rapoo

请帮忙看看下面的指针赋值为什么会错
char *str1= "www.google.com ";
char *pss=str;
i=strlen(str1);
for(j=0;j <i;j++)
{
if(*str1== '. ')
{
*str1= '@ ';//这里就死出来了
}
str1++;
}
printf( "str1:%s\n ",str1);

而且用:char *str1= "www.google.com ";
char *str2= ". ";
strtok(str1,str2);这里也会出错,
这两个错都是运行时直接死出来,请问错在哪呢?

改成数组后就没问题
char str1[]= "www.google.com ";
i=strlen(str1);
for(j=0;j <i;j++)
{
if(str1[j]== '. ')
{
str1[j]= '@ ';
}
}
printf( "str1:%s\n ",str1);

[解决办法]
char *str1= "www.google.com ";
"www.google.com " 是静态常量。
你声明的指针是一个指向静态常量的指针。
[解决办法]
char *str1= "www.google.com ";
是常量字符串,修改是非法的.

[解决办法]
char *str1= "www.google.com ";

这只是定义了一个指向字符串的指针而已,这个指针它指向这个字符串的首地址,

而字符串是常量,在整个程序运行的过程中都是不可以修改的。

所以你这样:
*str1= '@ '
相当于对字字符串常量进行了修改,当然是不允许的

数组是可以修改的,所以改成数组之后运行正确
[解决办法]
其实char *str1= "www.google.com ";

写成这样更明确:const char *str1= "www.google.com ";

也就是说,这个字符串是不可以被修改的常量

读书人网 >C++

热点推荐