请帮忙看看下面的指针赋值为什么会错解决方案
请帮忙看看下面的指针赋值为什么会错
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 ";
也就是说,这个字符串是不可以被修改的常量
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 ";
也就是说,这个字符串是不可以被修改的常量