试图改变指针值

时间:2014-02-12 17:16:08

标签: c pointers memory shortcode

我正在使用C中的指针进行测试,当我尝试使用此代码时:

int main()
{

    char  * b = "abc";
    char * c = b;

    *c = *(b+1); //problem
    printf("%s",c); 
} 

我在注释行上出错,我打算打印的是bbc,为什么指针分配不起作用?

2 个答案:

答案 0 :(得分:4)

c指向字符串文字,不允许修改字符串文字,它是undefined behavior。 C99标准部分6.4.5 字符串文字 6 草案中包含了这一点,其中说明了(强调我的):

  

如果这些数组的元素具有不同的数据,则未指定   适当的价值观如果程序试图修改这样的数组,则行为是   未定义

所以这个程序的行为是不可预测的。

答案 1 :(得分:0)

变量bc都指向同一个字符串,该字符串位于程序的(只读)代码部分。

在运行期间,当CPU执行*c = *(b+1)时,它会执行非法的内存访问。

您应该将此字符串声明为函数main中的本地数组,因此它将位于堆栈中:

char b[] = "abc";